IO流

           字节流                                                                       字符流
    字节输入流                     字节输出流                          字符输入流         字符输出流
    InputStream                   OutputStream                        Reader            Writer   (抽象类)
    FileInputStream             FileOutputStream                 FileReader        FileWriter(实现类,低级流,原始流)
    BufferedInputStream     BufferedOutputStream          BufferedReader    BufferedWriter(实现类,缓冲流)

>   - Windows系统里,每行结尾是 `回车+换行` ,即`\r\n`;
>   - Unix系统里,每行结尾只有 `换行` ,即`\n`;
>   - Mac系统里,每行结尾是 `回车` ,即`\r`。从 Mac OS X开始与Linux统一。


字节输出流【OutputStream】:

- `public void close()` :关闭此输出流并释放与此流相关联的任何系统资源。  
- `public void flush() ` :刷新此输出流并强制任何缓冲的输出字节被写出。  
- `public void write(byte[] b)`:将 b.length字节从指定的字节数组写入此输出流。  
- `public void write(byte[] b, int off, int len)` :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。  
- `public abstract void write(int b)` :将指定的字节输出流。

- `public FileOutputStream(File file)`:创建文件输出流以写入由指定的 File对象表示的文件。
- `public FileOutputStream(String name)`: 创建文件输出流以指定的名称写入文件。 

这两个构造方法,参数中都需要传入一个boolean类型的值,`true` 表示追加数据,`false`

public class FileOutputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        OutputStream os=new FileOutputStream("d.txt");//追加数据管道
        os.write(‘a‘);
        os.write(98);
        byte[] bytes={99,112,111,116,106};
        os.write(bytes);
        os.write("\n".getBytes());

        byte[] bytes1="我的名字很拽\r\n".getBytes();
        System.out.println(bytes1.length);
        os.write(bytes1);


        byte[] bytes3="abcde".getBytes();
        os.write(bytes3,0,3);  //abcpotj
        os.close();                    //我的名字很拽
                                       //abc
    }
}

字节输入流【InputStream】:

- `public void close()` :关闭此输入流并释放与此流相关联的任何系统资源。    
- `public abstract int read()`: 从输入流读取数据的下一个字节。
- `public int read(byte[] b)`: 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。

- `FileInputStream(File file)`: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
- `FileInputStream(String name)`: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

public class FileInputStreamDemo2 {
    public static void main(String[] args) throws IOException {
//        File file = new File("b.txt");
//        file.createNewFile();
//
//        InputStream is=new FileInputStream(file);
//        byte[] buffer=new byte[3];

//        int read = is.read(buffer);
//        System.out.println(read);
//        String s=new String(buffer);
//        System.out.println(s);
//
//        int read1 = is.read(buffer);
//        System.out.println(read1);
//        String s1 = new String(buffer);
//        System.out.println(s1);
//
//        int read2 = is.read(buffer);
//        System.out.println(read2);
//        String s2 = new String(buffer);
//        System.out.println(s2);
        InputStream is= new FileInputStream("b.txt");
        byte[] buffer=new byte[3];
        int len=0;
        while((len=is.read(buffer))!=-1){
            String s=new String(buffer,0,len);
            System.out.print(s);
        }     
      is.close(); } }

字符输入流【Reader】:

- `public void close()` :关闭此流并释放与此流相关联的任何系统资源。    
- `public int read()`: 从输入流读取一个字符。
- `public int read(char[] cbuf)`: 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。

- `FileReader(File file)`: 创建一个新的 FileReader ,给定要读取的File对象。   
- `FileReader(String fileName)`: 创建一个新的 FileReader ,给定要读取的文件的名称。 

public class FileReaderDemo2 {
    public static void main(String[] args) throws IOException {
//        Reader fr=new FileReader("bb.txt");
//        char[] buffer=new char[3];
//        int len = fr.read(buffer);
//        String s=new String(buffer);
//        System.out.println(s);


        Reader  fr = new FileReader("bb.txt");
        char[] buffer=new char[1024];
        int len;
        while ((len=fr.read(buffer))!=-1){
            System.out.println(new String(buffer,0,len));
        }
        fr.close();
        
    }
}

字符输出流【Writer】:

- `public abstract void close()` :关闭此输出流并释放与此流相关联的任何系统资源。  
- `public abstract void flush() ` :刷新此输出流并强制任何缓冲的输出字符被写出。  
- `public void write(int c)` :写出一个字符。
- `public void write(char[] cbuf)`:将 b.length字符从指定的字符数组写出此输出流。  
- `public abstract void write(char[] b, int off, int len)` :从指定的字符数组写出 len字符,从偏移量 off开始输出到此输出流。  
- `public void write(String str)` :写出一个字符串。

- `FileWriter(File file)`: 创建一个新的 FileWriter,给定要读取的File对象。   
- `FileWriter(String fileName)`: 创建一个新的 FileWriter,给定要读取的文件的名称

**写出字符数组** :`write(char[] cbuf)` 和 `write(char[] cbuf, int off, int len)`

public class FileWriterDemo2 {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("www.txt");
        fw.write("我");
        fw.flush();
        fw.write("爱");
        fw.flush();
        fw.write("中");
        fw.close();
        fw.write("国");
        fw.close();  //报错 java.io.IOException: Stream closed
    }
}
public class FileWriterDemo3 {
    public static void main(String[] args) throws IOException {
        FileWriter fw1 = new FileWriter("www.txt");
        char[] ch="我爱中国".toCharArray();
        fw1.write(ch,1,2);  //爱中
        fw1.write("\r\n");

        String s="喜羊羊与灰太狼";
        fw1.write(s,1,5);  //羊羊与灰太

        fw1.close();

    }
}

字节缓冲流:

* `public BufferedInputStream(InputStream in)` :创建一个 新的缓冲输入流。
* `public BufferedOutputStream(OutputStream out)`: 创建一个新的缓冲输出流。

// 创建字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bis.txt"));
// 创建字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bos.txt"));

public class BufferedStreamDemo1 {
    public static void main(String[] args) {
        long start=System.currentTimeMillis();
        try(BufferedInputStream bis = new BufferedInputStream(
                new FileInputStream("E:\\素材\\鬼灭之刃-栗花落香奈乎(包含图片素材)\\tsy.mp4"));
            BufferedOutputStream bos=new BufferedOutputStream(
                    new FileOutputStream("E:\\素材\\鬼灭之刃-栗花落香奈乎(包含图片素材)\\缓冲速度.mp4"));

                ) {
            byte[] bytes = new byte[8*1024];
            int len;
            while ((len=bis.read(bytes))!=-1){
                bos.write(bytes,0,len);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        long end=System.currentTimeMillis();
        System.out.println(end-start);  //108
    }
}

字符缓冲流

* `public BufferedReader(Reader in)` :创建一个 新的缓冲输入流。
* `public BufferedWriter(Writer out)`: 创建一个新的缓冲输出流。

// 创建字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
// 创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));

* BufferedReader:`public String readLine()`: 读一行文字。
* BufferedWriter:`public void newLine()`: 写一行行分隔符,由系统属性定义符号。

public class BufferedWriterDemo1 {
    public static void main(String[] args) throws IOException{
         BufferedWriter bw = new BufferedWriter(new FileWriter("缓冲字符流.txt"));
            bw.write("我爱中国");
            bw.newLine();
            bw.write("我和他他他");
            bw.write("\r\n");
            bw.write("我们之间的距离");
            bw.newLine();
            bw.close();

        BufferedReader bd = new BufferedReader(new FileReader("缓冲字符流.txt"));
//        int len;
//        while ((len=bd.read())!=-1){
//            System.out.print((char) len);
//        }

       String line;
        while ((line=bd.readLine())!=null){
            System.out.println(line); //我爱中国
                                      //我和他他他
                                      //我们之间的距离
        }
        bd.close();

 

IO流

上一篇:虚拟点赞浏览功能的大数据量测试


下一篇:Windows Server 2008 笔记【瞎写】