黑马程序员技术交流社区
标题: 【成都校区】文件操作类File——IO流 学习笔记(2) [打印本页]
作者: 迷上莲的鳕鱼 时间: 2019-4-22 16:25
标题: 【成都校区】文件操作类File——IO流 学习笔记(2)
文件操作类File——IO流 学习笔记(2)
· IO流
· 理解
· IO流其实就是输入输出流,注意这里的输出输入是针对程序来说的。所以不管是input还是read,都是将数据读入程序中,即输入流,而output和write则是输出流。
· 既然是输入输出流,那么肯定分为输出和输出,而有输入方法就会有相应的输出方法,如InputXXX就会有OutputXXX。这里为方便记忆可以将其放在一起比较记忆。
· 主要的流
· 字节流
对于非纯文本文件或者不确定内容的文件,统一使用字节流。底层是ASCII码对应的字节。读取的为字节的ASCII码,写入文件的为字符 。注意转义的符号也会算在文件里面,即比如换行符(输出的时候换
行符在被算作字节的同时也会起到换行作用)
读写内容
//一个一个字节
int by;
while((by = fis.read()) != -1){
fos.write(by);
}
//字节数组
byte[] bys = new byte[1024];
int len;
while((len =fis.read(bys)) != -1){
fos.write(bys,0,len );
}
字符流
对于纯文本文件,可以直接使用字符流要注意编码,某些国内文件默认的编码是GBK(两个字节),而文件读写默认编码是UTF-8(三个字节)字符流主要是依靠转换流而对文件进行读写的读写方式
//一个一个字符
int ch;
while((ch = isr.read()) != -1){
osw.write(ch);//sout(by)
}
//字符数组
char[] chs = new char[1024];
int len;
while((len =isr.read(chs)) != -1){
osw.write(chs,0,len);//System.out.println(new String(chs,0,len));
}
//直接读取字符串的
//这个是最常用的
String line;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}这里有一个简化的创建对象的写法,通过转换流的子类FileReader和FileWriter,用法几乎一致,声明更简洁如FileReader fr = new FileReader("path')
· 转换流
InputStreamReader 字节流到字符流的桥梁
OutputStreamWriter 字符流到字节流的桥梁
转换流有参构造的参数是相应的字节流对象,
转换流的两个编码必须相同,不然会出现乱码
· 缓冲流(高效流)
通常情况下,不论字符还是字节的输入输出,都能直接用。
使IO更高效缓冲流仅仅提供缓冲区,真正的读写还是依靠基本的输入输出流进行操作,于是在创建对象的时候需要用有参构造,其参数为相应的输入输出流类。
除了创建对象,缓冲流与正常的流用法几乎一模一样
字符缓冲流特有:newLine();行分割readLine();读一行字
· 主要使用步骤
· 创建输入(输出)对象
· 读入(写出)
· 关闭流
· 注意事项
· 采用何种方式编码就要采用何种方式解码,否则就会出现乱码
· 字符流的写出一定要注意使用flush()方法进行刷新
· 流用完了之后一定要close()关闭
-
文件操作类File——IO流 学习笔记(1).png
(228.92 KB, 下载次数: 35)
作者: 迷上莲的鳕鱼 时间: 2019-4-22 16:27
排版有点问题,主要被编辑这里搞得懵比了,连调节文字大小都将我深深打败
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |