JAVA学习笔记第七章
7.IO流
7.1File类
7.1.1对文件进行操作
toString的效果永远是相对路径,在main方法中,相对位置一般指的就是工作空间
绝对路径就是一个精准的、真实的、完整的路径
7.1.2对路径进行操作
上面对文件的方法,对路径都可以使用
但是对路径有一些单独的方法
7.2IO流
7.2.1FileReader
从文件-》程序
如果到文件的结尾,读取的内容为-1。反过来,读取到-1,那么就是文件的结尾。
一次读取多个字符
7.2.2FileWriter
几个字符一起写入
7.2.3文件复制
利用FileReader和FIleWriter
package file.test;
import java.io.*;
/**
* @Author:wrr
* @Date:2021/5/20 - 05 - 20 - 11:49 下午
* @Description:code_train
*/
public class FileTest {
public static void main(String[] args) throws IOException {
File f = new File("test.txt");
//System.out.println(f.getAbsoluteFile());
File f1 = new File("test1.txt");
FileReader fr = new FileReader(f);
FileWriter fw = new FileWriter(f1);
//方式一:一个字符一个字符的读取和写入
/*
int n = fr.read();
while(n != -1){
fw.write(n);
n = fr.read();
}
*/
//方式二:多个字符多个字符读取和写入
char[] ch = new char[5]; //利用缓冲数组
int len = fr.read(ch); //返回len是读取的有效长度
while(len != -1){
fw.write(ch, 0, len); //将缓冲数组的有效长度写出到文件
len = fr.read(ch);
}
fr.close();
fw.close();
}
}
使用try catch,关闭流的放到finally
7.2.4FileInputStream
获取读取的字节数:
利用缓冲数组:
7.2.5图片复制
package file.test;
import java.io.*;
/**
* @Author:wrr
* @Date:2021/5/21 - 05 - 21 - 1:19 下午
* @Description:code_train
*/
public class PhotoCopy {
public static void main(String[] args) throws IOException {
//源文件
File f = new File("图3-3.jpg");
File f1 = new File("图3-3(副本).jpg");
//生成流
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(f1);
//复制
byte[] b = new byte[1024];
int len = fis.read(b);
while(len != -1){
fos.write(b, 0, len);
len = fis.read(b);
}
//关闭流
fis.close();
fos.close();
}
}
7.2.6BufferedInputStream
效率对比:
7.2.7BufferedReader
7.2.8InputStreamReader
如果编码不统一控制台会显示乱码,不写默认获取程序本身的编码
利用InputStreamReader读取文本文件,OutputStreamWriter写入文件
7.2.9System相关IO
7.2.10键盘输入写入文件
7.2.11DataInputStream
7.2.12ObjectInputStream
对对象进行操作--》二进制数据:序列化
二进制数据———》对象:反序列化
将上面的Person类加上toString方法,结果出现异常
出现的原因:
解决方法:给类加上一个序列号serialVersionUID
将带序列号的对象写入文件,这样读取文件的对象就能根据序列号识别类,不管类里面增加了什么方法、属性,仍然可以进行反序列化,那个对象可以正常使用toString方法,
idea配置序列号,将设置里面对应的选项勾选