Java学習ノート(十一)IOフロー

16319 ワード

IOストリームは、始点と終点の秩序あるバイトシーケンスである
IOストリームの分類
  • 入力ストリームと出力ストリームプログラムが外部からデータを読み出すことが入力ストリームであり、プログラムがデータを外部に保存することが出力ストリーム
  • である.
  • バイトストリームと文字ストリームのバイト単位の処理ストリームにおけるデータがバイトストリームである、文字単位の処理ストリームにおけるデータが文字ストリーム
  • である.
  • ノードストリームと処理ストリームは、デバイスから直接データを読み書きするノードストリームであり、処理ストリームはノードストリームに対するパッケージ
  • である.FileInputStreamおよびFileOutputStreamFileInputStreamストリームはファイルの内容をバイト単位で読み出し、FileOutputStreamストリームはバイト単位でデータをファイルに保存する.この対流クラスはすべてのフォーマットのファイルを読み書きすることができます.
    import java.io.FileInputStream;
    import java.io.IOException;
    
    /**
     * FileInputStream       
     */
    public class Test01 {
        public static void main(String[] args) throws IOException {
            //    FileInputStream              ,    :abcdef
            FileInputStream fis = new FileInputStream("/Users/Desktop/test");
    
            //    available()                
            System.out.println(fis.available());
    
            //    read()               
            int bb = fis.read();
            System.out.println(bb);
    
            //    skip()             
            //   2  
            fis.skip(2);
            System.out.println(fis.available());
    
            System.out.println(fis.read());
    
            //    
            fis.close();
            
        }
    }
    

    出力内容:
    6
    97
    3
    100
    
    import java.io.FileInputStream;
    import java.io.IOException;
    
    /**
     *    FileInputStream           
     */
    public class Test02 {
        public static void main(String[] args) throws IOException {
            //               
            FileInputStream fis = new FileInputStream("/Users/Desktop/test");
    
            //    read()         ,            -1
            int bb = fis.read();
            while (bb != -1) {
                System.out.println((char)bb);
                bb = fis.read();
            }
    
            //    
            fis.close();
    
        }
    }
    

    出力内容:
    a
    b
    c
    d
    e
    f
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Arrays;
    
    /**
     *    FileInputStream         ,               
     */
    public class Test03 {
        public static void main(String[] args) throws IOException {
            //               ,    :abcdef
            FileInputStream fis = new FileInputStream("/Users/Desktop/test");
    
            //    read(byte[] b)             bytes    ,        
            byte [] bytes = new byte[4];
            int len = fis.read(bytes);
            //    4   
            System.out.println(len);
            //     :[97, 98, 99, 100]
            System.out.println(Arrays.toString(bytes));
    
            //        
            len = fis.read(bytes);
            //    2   
            System.out.println(len);
            //     :[101, 102, 99, 100]
            System.out.println(Arrays.toString(bytes));
    
            //        
            len = fis.read(bytes);
            //         ,   -1
            System.out.println(len);
            //     :[101, 102, 99, 100]
            System.out.println(Arrays.toString(bytes));
    
            //    
            fis.close();
    
        }
    }
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * FileOutPutStream                 
     */
    public class Test04 {
        public static void main(String[] args) throws IOException {
            //               ,             
            //           
    //        FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
    
            //           
            FileOutputStream fos = new FileOutputStream("/Users/Desktop/test", true);
    
            //    write(int)   ,        
            fos.write(97);
            fos.write(98);
            fos.write(99);
    
            //    write(byte[] b)   ,                
            byte [] bytes = "hello FileOutPutStream".getBytes();
            fos.write(bytes);
    
            //    write(byte[] b, int off, int len)   ,              
            fos.write(bytes, 0, 5);
    
            //    
            fos.close();
        }
    }
    

    ファイルの内容:
    abchello FileOutPutStreamhello
    
    BufferedInputStreamおよびBufferedOutputStreamBufferedInputStreamバッファ入力バイトストリーム、バイトストリームは8192バイトの配列をバッファとして、プログラムはバッファからデータを読み出して、直接ファイルを操作しませんBufferedOutputStream出力バイトストリームをバッファリングし、プログラムはデータをバッファに書き込み、他のバイトストリームからバッファからデータをファイルに書き込む.BufferedInputStreamおよびBufferedOutputStreamは処理フローに属する
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    /**
     * BufferedInputStream      
     */
    public class Test01 {
        public static void main(String[] args) throws IOException {
            m1();
        }
    
        public static void m1 () throws IOException {
            //       ,    :hello
            FileInputStream fis = new FileInputStream("/Users/Desktop/test");
    
            //               
            BufferedInputStream bis = new BufferedInputStream(fis);
    
            //          
            int bb = bis.read();
            while (bb != -1) {
                System.out.println((char)bb);
                bb = bis.read();
            }
    
            //      
            bis.close();
        }
    }
    

    出力結果:
    h
    e
    l
    l
    o
    
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * BufferedOutputStream      
     */
    public class Test02 {
        public static void main(String[] args) throws IOException {
            m2();
        }
    
        public static void m2 () throws IOException {
            //       
            FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
    
            //       
            BufferedOutputStream bos = new BufferedOutputStream(fos);
    
            //         
            bos.write(65);
            bos.write(66);
            bos.write(67);
    
            //      ,           
            bos.flush();
    
            //      ,           
            bos.close();
        }
    }
    

    ファイルの内容:
    ABC
    
    DataInputStreamおよびDataOutputStream以前のFileInputStreamストリームはファイルから1組の01バイナリシーケンスを読み出し、対応するデータに変換し、FileOutputStreamは対応するデータを01バイナリシーケンスに変換し、ファイルに書き込むDataInputStreamストリームは直接ファイルの中で整数、小数、文字、文字列、ブールタイプのデータを読み取ることができて、DataOutputStreamは直接整数、小数、文字、文字列、ブールタイプのデータをファイルに書き込むことができます
    import java.io.DataOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * DataOutputStream              
     */
    public class Test01 {
        public static void main(String[] args) throws IOException {
            //       
            FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
    
            //     DataOutputStream  
            DataOutputStream dos = new DataOutputStream(fos);
    
            //     ,              ,     DataInputStream     
            dos.writeInt(123);
            dos.writeDouble(3.14);
            dos.writeChar(' ');
            dos.writeBoolean(false);
            dos.writeUTF("hello");
    
            //    
            dos.close();
        }
    }
    
    import java.io.DataInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    /**
     * DataInputStream     
     */
    public class Test02 {
        public static void main(String[] args) throws IOException {
            //       
            FileInputStream fis = new FileInputStream("/Users/Desktop/test");
    
            //     DataInputStream  
            DataInputStream dis = new DataInputStream(fis);
    
            //                  
            int i = dis.readInt();
            double d = dis.readDouble();
            char c = dis.readChar();
            boolean b = dis.readBoolean();
            String s = dis.readUTF();
    
            //    
            dis.close();
    
            //   
            System.out.println(i);
            System.out.println(d);
            System.out.println(c);
            System.out.println(b);
            System.out.println(s);
    
        }
    }
    

    出力内容:
    123
    3.14
     
    false
    hello
    
    ObjectInputStreamおよびObjectOutputStreamObjectOutputStreamストリームオブジェクトをバイナリシーケンスに変換してファイルに書き込むオブジェクトシーケンス化ObjectInputStreamストリームは、読み込まれたバイナリシーケンスをオブジェクトに変換し、オブジェクト逆シーケンス化と呼ぶ
    オブジェクトのシーケンス化と逆シーケンス化の前提は、オブジェクトのクラスがSerializableインタフェースを実現することであり、このインタフェースはフラグインタフェースであり、抽象的な方法はない.
    import java.io.Serializable;
    
    /**
     *      
     */
    public class Person implements Serializable {
        String name;
        int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    
    /**
     * ObjectOutputStream         
     */
    public class Test01 {
        public static void main(String[] args) throws IOException {
            Person p = new Person("  ", 18);
    
            //      
            FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
    
            //    ObjectOutputStream  
            ObjectOutputStream oos = new ObjectOutputStream(fos);
    
            //        ,      ,     ObjectInputStream    
            oos.writeObject(p);
    
            //    
            oos.close();
        }
    }
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    
    /**
     * ObjectInputStream      
     */
    public class Test02 {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            //      
            FileInputStream fis = new FileInputStream("/Users/Desktop/test");
    
            //    ObjectInputStream  
            ObjectInputStream ois = new ObjectInputStream(fis);
    
            //     
            Object o = ois.readObject();
    
            //    
            ois.close();
    
            //   
            System.out.println(o);
    
        }
    }
    

    出力内容:
    Person{name='  ', age=18}
    
    PrintStream
    ファイルに内容を印刷
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintStream;
    
    /**
     * PrintStream      
     */
    public class Test01 {
        public static void main(String[] args) throws FileNotFoundException {
            //      
            FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
            //      
            PrintStream ps = new PrintStream(fos);
    
            //           ,print()   println(),        
            ps.print("      ");
            ps.println("     ");
    
            //    system.out.println   ,           
            System.setOut(ps);
            System.out.println("              ,      test    ");
    
            //            
            try {
                FileInputStream fis = new FileInputStream("      ");
            }catch (FileNotFoundException e) {
                //          test    
                e.printStackTrace(ps);
            }
    
            //    
            ps.close();
    
        }
    }
    

    ファイルの内容:
               
                  ,      test    
    java.io.FileNotFoundException:        (No such file or directory)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
        at java.base/java.io.FileInputStream.(FileInputStream.java:157)
        at java.base/java.io.FileInputStream.(FileInputStream.java:112)
        at printio.Test01.main(Test01.java:28)
    
    FileReaderおよびFileWriterIOストリームクラスのReaderとWriterで終わる文字ストリームは、文字のみの純粋なテキストファイルを読み書きするために使用されます.FileReaderおよびFileWriterは、現在の環境コードと互換性のあるファイルのみを読み書きできます.
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    /**
     * FileReader   FileWriter
     */
    public class Test01 {
        public static void main(String[] args) throws IOException {
            readChar();
            readChar2();
            writeChar();
    
        }
    
        //       
        public static void readChar () throws IOException {
            //      
            FileReader fr = new FileReader("/Users/Desktop/test");
            //    read()         ,          ,         -1
            int code = fr.read();
            while (code != -1) {
                System.out.print((char)code);
                code = fr.read();
            }
            //    
            fr.close();
        }
    
        //              
        public static void readChar2 () throws IOException {
            //      
            FileReader fr = new FileReader("/Users/Desktop/test");
            //       
            char [] chars = new char[1024];
            //               chars  ,        
            int len = fr.read(chars);
            while (len != -1) {
                System.out.print(String.valueOf(chars, 0, len));
                len = fr.read(chars);
            }
            //    
            fr.close();
        }
    
        //       
        public static void writeChar () throws IOException {
            //      
            FileWriter fw = new FileWriter("/Users/Desktop/test");
    
            //       
            //         
            fw.write('1');
            fw.write('a');
            fw.write(' ');
            fw.write('#');
    
            //       
            char [] chars = "hello charArray".toCharArray();
            fw.write(chars);
            
            //      
            fw.write("hello str")
    
            //    
            fw.close();
    
        }
    }
    
    
    InputStreamReaderおよびOutputStreamWriter符号化が一致しないテキストファイルを読み書きしたい場合は、InputStreamReaderOutputStreamWriterを使用します.InputStreamReaderバイトストリームを文字ストリームに変換OutputStreamWriterは、文字ストリームをバイトストリームに変換することができる
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.IOException;
    
    /**
     * InputStreamReader   OutputStreamWriter
     */
    public class Test02 {
        public static void main(String[] args) throws IOException {
            readGBKFile();
            writeGBKFile();
        }
    
        //   UTF8      GBK   
        public static void readGBKFile () throws IOException {
            //      
            FileInputStream fis = new FileInputStream("/Users/Desktop/test");
            //      ,      GBK         
            InputStreamReader isr = new InputStreamReader(fis, "GBK");
            //       ,           
            int code = isr.read();
            while (code != -1) {
                System.out.print((char)code);
                code = isr.read();
            }
            //    
            isr.close();
        }
    
        //   UTF8       GBK   
        public static void writeGBKFile () throws IOException {
            //      
            FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
            //      ,      GBK         
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            //     
            osw.write("    UTF8     ,         GBK");
            //    
            osw.close();
        }
    }
    
    BufferedReaderおよびBufferedWriterBufferedWriterは、出力文字ストリームをバッファリングし、バッファにデータを書き込み、バッファをリフレッシュしたり、バッファがいっぱいになったり、ストリームを閉じたりしたときに、バッファのデータをファイルに書き込むことができます.BufferedReader入力文字ストリームをバッファリングし、バッファからデータを読み出し、ファイルを直接操作しない
    import java.io.IOException;
    import java.io.FileWriter;
    import java.io.FileReader;
    import java.io.BufferedWriter;
    import java.io.BufferedReader;
    
    /**
     * BufferedReader   BufferedWriter
     */
    public class Test03 {
        public static void main(String[] args) throws IOException {
            writerBf();
            readBf();
        }
    
        //            
        public static void writerBf () throws IOException {
            //      
            FileWriter fw = new FileWriter("/Users/Desktop/test");
            //        
            BufferedWriter bw = new BufferedWriter(fw);
            //         
            bw.write("      ");
            //      ,            
            bw.flush();
            //    
            bw.close();
        }
    
        //            
        public static void readBf () throws IOException {
            //      
            FileReader fr = new FileReader("/Users/Desktop/test");
            //        
            BufferedReader br = new BufferedReader(fr);
            //           ,           null
            String line = br.readLine();
            while (line != null) {
                System.out.println(line);
                line = br.readLine();
            }
            //    
            br.close();
        }
    }
    

    出力結果: