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();
}


IO指的是输入(input)和输出(Output),是一种抽象概念,是对数据传输的总称,即数据在设备间的传输称为,其本质是数据传输。IO用来处理设备间数据传输问题,常见应用有文件复制、文件上传、文件下载等[^1]。 IO可以从多个维度进行分类: - 按方向分类:可分为输入和输出。 - 按传输单位分类:有字节和字符。 - 按功能分类:可分为节点和处理等。 在Java中,常见的IO包括以下几类: ### 字符 - `FileReader`/`FileWriter`:用于读写文件的字符。 - `BufferedReader`/`BufferedWriter`:提供缓冲功能,提高读写效率。 - `PipedReader`/`PipedWriter`:用于线程间通信的管道。 - `InputStreamReader`/`OutputStreamWriter`:用于字节和字符之间的转换。 - `PrintWriter`:方便进行格式化输出的字符输出。 ### 字节 - `InputStream`/`OutputStream`:字节的抽象基类。 - `FileInputStream`/`FileOutputStream`:用于读写文件的字节。 - `FilterInputStream`/`FilterOutputStream`:过滤的抽象基类。 - `BufferedInputStream`/`BufferedOutputStream`:提供缓冲功能的字节。 - `DataInputStream`/`DataOutputStream`:用于读写基本数据类型的字节。 - `ObjectInputStream`/`ObjectOutputStream`:用于对象的序列化和反序列化。 - `PrintStream`:方便进行格式化输出的字节输出。 以下是一些Java中使用IO的代码示例: #### 字节读取文件 ```java import java.io.FileInputStream; import java.io.IOException; public class ByteStreamReadExample { public static void main(String[] args) { try { // 创建一个读取文件的对象 FileInputStream fIpS = new FileInputStream("D:\\IdeaProjects\\untitled1\\untit__IO\\src\\Day_2\\fIpS_1.txt"); // 调用该对象的读取方法 // 字节读数据的标准代码 int read; while ((read = fIpS.read()) != -1) { System.out.print((char) read); } // 关闭此文件输入并释放与相关联的任何系统资源 fIpS.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` #### 字节写入文件 ```java import java.io.FileOutputStream; import java.io.IOException; public class OutputDemo2 { public static void main(String[] args) { try { // 1. 创建字节输出的对象 // 注意点:如果文件不存在,会帮我们自动创建出来. // 如果文件存在,会把文件清空. FileOutputStream fos = new FileOutputStream("C:\\itheima\\a.txt"); // 2. 写数据 传递一个整数时,那么实际上写到文件中的,是这个整数在码表中对应的那个字符. fos.write(98); // 3. 释放资源 fos.close(); // 告诉操作系统,我现在已经不再用这个文件了. } catch (IOException e) { e.printStackTrace(); } } } ``` #### 字符写入文件 ```java import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; public class CharacterStreamWriteExample { public static void main(String[] args) { try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:/news11.txt")))) { bw.write("hi,韩顺平教育"); } catch (IOException e) { e.printStackTrace(); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值