IO流

毕向东笔记


1.输入输出流,字节字符流,Buffered关系

IO流用来处理设备之间的数据传输
输入流(硬盘到内存)读
输出流(内存到硬盘)写

字节流0101101(字节读取流,字节写入流)
字符流abcdefg(字符读取流,字符写入流)字节流加编码表

缓冲区:(结合流提高读写效率)
(Writer)BufferedWriter
(Reader)BufferedReader

字节流
InputStream
OutputStream
字符流
Reader
Writer
输入流(R)FileInputStream文本:(InputStreamReader)FileReader
输出流(W)FileOutputStream文本:(OutputStreamWriter) FileWriter

2.树状图

字符流:
Reader
    |-BufferedReader(装饰)
        |-LineNumberReader 
    |-InputStreamReader(字节转字符)
        |-FileReader
Writer
    |-BufferedWriter(装饰)
    |-OutputStreamWriter(字符转字节)
        |-FileWriter

字节流:
InputStream
    |-FileInputStream
        |-BufferedInputStream(装饰)
OutputStream
    |-FileOutputStream 
        |-BufferedOutputStream(装饰)




***
FileWriter("demo.txt",ture)//续写
LINE SEPARATOR = System.getProperty("line.separator")//换行
windows:\r\n
linux:\n
***

3.FileWriter和BufferedWriter

public class FileWriterDemo {
    public static void main(String[] args) {
        FileWriter fw = null;
        try {
            fw = new FileWriter("k:\\demo.txt", true);\\FileNotFoundException
            fw.write("abcde");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fw != null)\\不写会有NullPointerException
                    fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}


public class BufferedWriterDemo {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("demo.txt");

        BufferedWriter bufw = new BufferedWriter(fw);

        bufw.write("abcd你好");
        bufw.newLine(); //换行
        bufw.write("abcd你好");
        bufw.close();

    }
}

4.FileReader和BufferedReader

public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        InputStreamReader fr = new FileReader("demo.txt");

        char[] buf = new char[1024];
        int len = 0;
        while ((len = fr.read(buf)) != -1) {
            System.out.println(new String(buf,0,len));
        }
    }
}

public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {

        FileReader fr = new FileReader("demo.txt");

        BufferedReader bufr = new BufferedReader(fr);


        String line = null;
        while ((line = bufr.readLine()) != null) {
            System.out.println(line);
        }

        bufr.close();
    }
}

5.字符流的Copy(文本拷贝)

public class CopyDemo {
    private static final int BUFFER_SIZE = 1024;

    public static void main(String[] args) throws IOException {
        FileReader fr = null;
        FileWriter fw = null;
        try {
            fr = new FileReader("demo.txt");
            fw = new FileWriter("demo2.txt", true);
            //创建一个临时容器,用于缓存读取到的字符
            char[] buf = new char[BUFFER_SIZE];
            //定义一个变量记录读取到的字符数
            int len = 0;
            while ((len = fr.read(buf)) != -1) {
                fw.write(buf,0,len);
            }
        } catch (IOException e) {
            throw new RuntimeException("读写失败");
        }finally {
            if (fw!=null)
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            if (fr!=null)
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
}
public class BufferedCopyDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader bufr = null;
        BufferedWriter bufw = null;
        try {
            FileReader fr = new FileReader("demo.txt");
            FileWriter fw = new FileWriter("demo2.txt", true);
             bufr = new BufferedReader(fr);
             bufw = new BufferedWriter(fw);


            String line = null;
            while ((line = bufr.readLine()) != null) {
                bufw.write(line);
                bufw.newLine();
                bufw.flush();
            }
        } catch (IOException e) {
            throw new RuntimeException("读写失败");
        }finally {
            if (bufw!=null)
                try {
                    bufw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            if (bufr!=null)
                try {
                    bufr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
}

6.字节流的Copy(媒体拷贝)

字节流复制媒体文件


public class MediaCopyDemo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("1.mp3");
//        BufferedInputStream bufis = new BufferedInputStream(fis);


        FileOutputStream fos = new FileOutputStream("4.mp3");
//        BufferedOutputStream bufos = new BufferedOutputStream(fos);
        byte[] buf = new byte[1024];
        int len = 0;
        while ((len = fis.read(buf)) != -1) {
            fos.write(buf,0,len);

        }

        fos.close();
        fis.close();

    }
}

7.字节转字符 InputStreamReader

public class InputStreamReaderDemo {
    public static void main(String[] args) throws IOException {
        //字节流
        InputStream in = System.in;
        //字节转字符
        InputStreamReader isr = new InputStreamReader(in);
        //字符流
        BufferedReader bufr = new BufferedReader(isr);



        String line = null;
        while ((line = bufr.readLine()) != null) {
            if ("over".equals(line))
                break;
            System.out.println(line.toUpperCase());

        }
    }
}

简化:

字节转字符
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

字符转字节
BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(System.out));

8合理选择流对象

1,明确源和目的(汇)
源:InputStream Reader
目的:outputStream Writer

2,明确数据是否是纯文本数据。
源:是纯文本:Reader
        否:InputStream
目的:是纯文本Writer
        否:outputStream

3,明确具体的设备。
源设备:
        硬盘:File
        键盘:system.in
        内存:数组
        网络:Socket流
目的设备:
        硬盘:File
        键盘:system.out
        内存:数组
        网络:Socket流
4,是否需要其他额外功能。
    1,是否需要高效(缓冲区);
        是,就加上buffer.

需求一:复制一个文本文件
        FileReader FileWriter
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));

需求二:读取键盘录入信息,并写到文件

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));

需求三:文本文件输出到控制台

BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(System.out));

需求四:读取键盘录入显示到控制台上

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(System.out));

需求五:将一个中文字符串数据按照指定编码表写到一个文本中
BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(new FileOutputStream("a.txt"),"utf-8");

固定读写代码:
String line = null;
while((line=bufr.readLine())!=null){
    bufw.write(line);
    bufw.newLine();
    bufw.flush();
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值