IO流
File 类
在创建对象的时候需要传入文件的路径名,这里需要注意绝对路径和相对路径的关系:
- 绝对路径来说,从系统根目录开始写,这个是没有问题的。
- 相对路径来说,根目录是当前项目的根目录
File 类有很多的方法直接操作文件属性。
File file = new File("a.txt");
try {
file.createNewFile();
System.out.println("绝对路径是: " + file.getAbsolutePath());
System.out.println("相对路径是: " + file.getPath());
System.out.println("文件是" + (file.canWrite()?"可":"不可") +"写的。");
file.delete();
File f1 = new File("a/b/c");
f1.mkdirs();
f1.delete();
} catch (IOException e) {
e.printStackTrace();
}
字节输入流(InputStream)
InputStream
字节流,操作文件的子类FileInputStream
调用 read() 方法,默认读一个字节,如果读到文件末尾,返回的是-1。
可以传入参数,参数是字节数组,而此时的返回值就是读入的字节数。
字节输出流(OutputStream)
输入流就比较简单,通常调用write() 方法就好了,参数传入一个需要写入的字节数组。需要注意的就是,在进行创建输出流对象的时候,FileOutputStream(String pathName,boolean append)
第二个参数表示是否在文件中追加,true为追加,false为覆盖原来内容,不追加。
字节流读二进制文件
DataInputStream 类通常用来读取二进制文件,它是 FileInputStream 的
输入流和输出流的区别
输入流和输出流是针对 jvm 来说的,从硬盘中向 jvm 中读入数据,所以就叫做input;而从 jvm 中向硬盘写出数据,所以就叫做output。
字符输入流
字节流和字符流等于是按照读入或者写入的单位不同划分的,InputStream 和 Reader 分为别是字节流和字符流的基类。
常用的子类有,BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
把字节流转化为字符流的过程:
FileInputStream fis = new FileInputStream("src\\test.txt");//创建文件字节流
InputStreamReader isr = new InputStreamReader(fis);//把字节流转化为字符流
BufferedReader br = new BufferedReader(isr);//BufferedReader 是InputStream的子类,调用这一个类的目的是使用 readLine() 方法
字符输出流
字符输出流的的基类是 Writer 类,可以读入一个字符串。比较容易接受。
对象的序列化和反序列化
- 序列化:把对象以字节流的形式写到文件里。
- 反序列化:从文件中以字节流的形式读入并返回一个对象
使用到的类 ObjectOutputStream 和 ObjectInputStream 两个类。
ObjectOutputStream write():把对象写入到文件中 ObjectInputStream read()的:从文件中读取对象。