File类
是java.io包下代表操作与平台无关的文件和目录的类,一个File类的对象可以代表一个文件或目录,可用于获取与文件相关的信息
public File (String 文件路径);
//例:
File file = new File("C:\\test.tst");
!!! 注:创建File类对象时,必须设置文件路径
File类的常用方法
IO流
*通过流读写文件*
IO流是指一连串流动的字符,以先进先出的方式发送信息的通道
I:input(读入操作)
O:output(写入操作)
流的分类
按流向分 输出流:只能写数据,不能读数据,实现程序从数据源中读取数据
输入流:只能读数据,不能写数据,实现程序向目标数据源中写数据
按处理单元分 字节流:以8位字节为操作数据单元的流
字符流:以16位字符为操作数据单元的流
按流的角色分 节点流:可以直接向一个特定的存储介质(如磁盘、文件)读写数据的流
处理流:用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据读 写操作的流
注:输入流主要由InputStream和Reader作为基类
字节输出流的基类:Outputstream
是抽象类,必须使用该类的子类进行实例化对象
常用方法
字节输出流FileOutputStream类
使用Outputstream类的FileOutputstream子类向文本文件写入数据
常用构造方法
创建文件输出流对象的常用方式
//方法一
File file = new File("D:\\mydoc\\test.txt");
OutputStream fos = new FileOutputStream(file);
//方法二
OutputStream fos=new FileOutputStream("D:\\doc\\test.txt");
//方法三
OutputStream fos=new FileOutputStream("D:\\doc\\test.txt",true);
字节输入流的基类:InputStream
从文件中读数据,与OutputStream一样,也是抽象类
常用方法
字节输入流FileInputStream类
使用InputStream类的FileInputStream子类向文本文件读取数据
常用构造方法
创建文件输入流对象的常用方式
//方法一
File file = new File("D:\\doc\\text.txt");
InputStream fis = new FileInputStream(file);
//方法二
InputStream fis = new FileInputStream("D:\\doc\\test.txt");
字符流基类
字符输出类:Writer(抽象类)
常用方法
字符输入类:Reader(抽象类)
常用方法
字符输入流FileReader类
这是Reader类的子类,从"D:/doc/1.txt"中读取数据,显示到控制台
实现步骤
1.导入相关的类
import java.io.FileReader;
import java.io.Reader;
import java.io.FileNotFoundException;
import java.io.IOEception;
2.创建FileReader对象
fr =new FileReader("路径");
3.循环使用read()方法读取文件中的数据
While(len=fr.read(ch)>0){
System.out.println(new String(ch,0,len));
}
4.关闭流
fr.close()
缓冲流
Java缓冲流自身并不具有·IO功能,只是在别的流上增加缓冲,以提高程序性能
分类:字节缓冲流
:字符缓冲流
1.BufferedWrite类
是Writer类的子类,带有缓冲区
默认情况下,只有缓冲区满的时候,才会把缓冲区的数据真正写道目的地,那减少物流写数据的次数,提高输入/输出操作的执行效率
2.BufferedReader类
Reader类的子类
带有缓冲区,提高文件读取的效率
把一批数据读取到缓冲区
从缓冲区内获取数据
文件流是一个可以直接向一个特定的存储介质(如磁盘,文件等)读写数据的流
使用节点流进行读写数据操作时,程序直接连接到数据源,而处理流是一个对已存在的流进行连接和封装,通过封装后的流实现数据读写操作的流,使用处理流进行读写操作时,程序并不会直接连接到实际的数据源
序列化
对象输出流(ObjectOutputStream):实现序列化
对象输入流(ObjectIbputStream):实现反序列化
使用对象输出流实现序列化
//创建可序列化的类,要求实现Serializable接口
public class Person implements Serializable{
private static final long seralVersionUID = 1L;
//...
}
//创建对象输出流(ObjectOutputStream)
ObjectOutputStream oos = null;
//省略异常处理代码
oos = new ObjectOutputStream(
new FileOutputStream("路径")
);
Person person = new Person("对象属性");
oos.writeObject(person);
if(oos != null){
oos.close();
}
限制序列化
使用transient
import java.io.Serializable;
public class Person implements Serializable{
private String name;
private transient int age;//被限制序列化
private String sex;
public void print(){
System.out.println("姓名:"+this.name",年龄:"+this.age",性别:"+this.sex+"。")
}
}