A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

文件操作类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);//soutby
}

//字符数组
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, 下载次数: 30)

文件操作类File——IO流 学习笔记(1).png

1 个回复

倒序浏览
排版有点问题,主要被编辑这里搞得懵比了,连调节文字大小都将我深深打败
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马