java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
下面小编就为大家带来一篇关于 Java 中的 IO 流总结 (推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
1、 流的继承关系,以及字节流和字符流。
2、 节点流 FileOutputStream 和 FileInputStream 和处理流 BufferedInputStream 和 BufferedOutputStream。以及对应的 FileOutputWriter,FileInputReader,BufferedInputReader,BufferedOutputWriter。
3、 转换流 InputStreamReader 和 OutputStreamWriter
一:流的继承关系
字节流
字符流
字符流和字节流的使用范围:字节流一般用来处理图像,视频,以及 PPT,Word 类型的文件。字符流一般用于处理纯文本类型的文件,如 TXT 文件等,字节流可以用来处理纯文本文件,但是字符流不能用于处理图像视频等非文本类型的文件。
二:处理流 BufferedReader,BufferedWriter,BufferedInputStream
BufferedOutputsStream,都要包上一层节点流。也就是说处理流是在节点流的基础之上进行的,带有 Buffered 的流又称为缓冲流,缓冲流处理文件的输入输出的速度是最快的。所以一般缓冲流的使用比较多。
下面是两个简单的文件复制的实例:
- public class MycopyTest {
- public static void main(String[] args) {
- File src = new File("D:/1.jpg");
- // D:/1.jpg必须的存在不然会报错
- File dest = new File("D:/2.jpg");
- // 如果D:/2.jpg存在则覆盖,如果不存在则新建
- streamCopy(src, dest);
- }
- private static void readCopy(File src, File dest) {
- FileReader fr = null;
- FileWriter fw = null;
- BufferedReader br = null;
- BufferedWriter bw = null;
- try {
- fr = new FileReader(src);
- fw = new FileWriter(dest);
- br = new BufferedReader(fr);
- bw = new BufferedWriter(fw);
- String str;
- while ((str = br.readLine()) != null) {
- bw.write(str);
- bw.newLine();
- }
- } catch(IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- try {
- bw.close();
- br.close();
- } catch(IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private static void streamCopy(File src, File dest) {
- FileInputStream fis = null;
- FileOutputStream fos = null;
- BufferedInputStream bis = null;
- BufferedOutputStream bos = null;
- try {
- fis = new FileInputStream(src);
- fos = new FileOutputStream(dest);
- bis = new BufferedInputStream(fis);
- bos = new BufferedOutputStream(fos);
- int len;
- byte[] b = new byte[1024];
- while ((len = bis.read(b)) != -1) {
- bos.write(b, 0, len);
- // bos.write(b,0,len);是把读到数组的大小字节写入
- // bos.write(b);最后一次如果数组未写满的话就会多读。
- }
- } catch(IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- try {
- bos.close();
- bis.close();
- } catch(Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
三:转换流 InputStreamReader 和 OutputStreamWriter
转换流的作用,文本文件在硬盘中以字节流的形式存储时,通过 InputStreamReader 读取后转化为字符流给程序处理,程序处理的字符流通过 OutputStreamWriter 转换为字节流保存。
- public class InputStreamWriterTest {
- public static void main(String[] args) {
- File src = new File("D:/Files/狗屁.txt");
- File dest = new File("D:/Files/斯密斯.txt");
- BufferedWriter bw = null;
- BufferedReader br = null;
- FileInputStream fis = null;
- FileOutputStream fos = null;
- try {
- fis = new FileInputStream(src);
- fos = new FileOutputStream(dest);
- InputStreamReader ir = new InputStreamReader(fis, "GBK");
- OutputStreamWriter ow = new OutputStreamWriter(fos, "GBK");
- bw = new BufferedWriter(ow);
- br = new BufferedReader(ir);
- String str;
- while ((str = br.readLine()) != null) {
- bw.write(str);
- bw.newLine();
- bw.flush();
- }
- } catch(IOException e) {
- e.printStackTrace();
- }
- try {
- bw.close();
- br.close();
- } catch(IOException e) {
- e.printStackTrace();
- }
- }
- }
以上这篇关于 Java 中的 IO 流总结 (推荐) 就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/1229/357261.html