文件操作类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()关闭 |