javaSE_day12
IO流
1. File类
- 创建对象时,不能创建文件夹和文件,只是对文件的一个描述
1.1 构造方法创建对象的三种格式
//构造方法创建对象的三种格式
public static void test1(){
File file =
new File("c:\\a\\b\\a.txt");//方式1
File file2 =
new File("c:\\a\\b","a.txt");//方式2
File path =
new File("c:\\a\\b");
File file3 =
new File(path,"a.txt");//方式3
System.out.println(file+","+file2+","+file3);
}
1.2 文件夹的创建和删除
- mkdir:创建一个文件夹
- mkdirs:创建多个文件夹
- delete:删除一个文件夹,若有多个文件夹,则delete多次即可
1.3 创建文件
- exists():判断文件是否存在
- createNewFile():新建文件
1.4 常用方法
2. IO: Input 、 Output
2.1 分类
-
按照流的读写方式
字节流- InputStream:由abstract修饰 ,(字节流输入的父类)
- OutputStream 由abstract修饰,(字节流输出的父类)
字符流
- Reader : 由abstract修饰 ,(字符流输入的父类)
- Writer 由abstract修饰,(字符流输出的父类)
都由abstract修饰,本身不能创建对象
-
按照流的方向
输入流、输出流 -
按照是否能直接操作数据文件
节点流:直接在构造方法中来传入要读写的文件对象或文件名。
处理流:不能直接在构造方法中来传入要读写的文件对象或文件名。(套接)
2.2 核心方法
- 输入流的核心方法:read()
- 输出流的核心方法:write()
2.3 操作的数组类型
- 字节流:byte类型
- 字符流:char类型
2.4 使用步骤
(1)选择流类(输入还是输出)
(2)确定方法(read还是write)
(3)关闭流 close(如果有缓冲区flush,则刷新缓冲区)
2.5 字节流
2.5.1 文件字节流——FileInputStream和FileOutputStream
- 可直接指向读写文件
- 如果是输出流,文件不存在,则自动创建文件
- 如果是输入流,不能自动创建文件,则需手动创建文件
2.5.2 对象字节流——ObjectInputStream 和ObjectOutputStream
用ObjectinputStream读写对象时要求对象所在的类是序列化的类。
- 对象的序列化:把对象转换成二进制的流,写到数据文件
- 对象的反序列化:将数据文件中二进制的流代表的数据恢复为对象
- 序列号:在 序列化存储/反序列化读取或者是序列化传输/反序列化接收 时,JVM 会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
- 实现序列化:只需实现Serializable接口(标识性接口)
eg:
2.6 字符流
2.6.1 文件字符流——FileReader和FileWriter
- 练习
/**
* FileReader和 FileWriter
* @author Dell
*/
public class Demo3 {
//练习:复制fw.txt内容到fw1.txt文件中
public static void test3() throws IOException {
//读
File file = new File("fw.txt");
if (!file.exists()) {
file.createNewFile();
}
FileReader fr = new FileReader(file);
char[] buf = new char[(int) file.length()];
fr.read(buf);
//写
FileWriter fw = new FileWriter("fw1.txt");
fw.write(buf);
fw.close();
fr.close();
}
public static void main(String[] args) throws IOException {
test3();
}
}
2.7 缓冲流——BufferedReader 和 BufferedWriter
- BufferedReader:
- readLine() 返回一行,如果返回值为null,说明文件内容读取完毕
- BufferedWriter:换行时只能在字符串后面跟\n
2.8 打印流——PrintWriter
println() 换行
2.9 转换流——InputStreamReader和 OutputStreamWriter
字节流 -> 字符流
2.10 RandomAccessFile类:输入流和输出流是一个流对象
对象声明:RandomAccessFile raf = newRandomAccessFile(File file, String mode);
其中参数 mode 的值可选 “r”:可读,“w” :可写,“rw”:可读性;
- r :输入流
- rw :既可以作为输入流,也可以作为输出流