Javaファイルの入力ストリームと出力ストリームの実際の分析(Xiaobaiに適しています)

        Java APIではバイトシーケンス読み取ることができるオブジェクト入力ストリームと呼び、バイトシーケンス書き込むことができるオブジェクトを出力ストリームと呼びます。最も関係する2つのストリームは、InputStreamとOutputStreamです。抽象クラス。この記事は「JavaCoreTechnology Volume Two」を読んだ私の経験です。コードは特定のシナリオと組み合わせて私が書いています。入力ストリームと出力ストリームの初心者である読者は、次の2つのストリームを正確に区別できると思います。それを読んで。最後に、カニとカニの3つのリンクを作成、いいね、収集、追跡するのは簡単ではありません〜

1つは、入力ストリームとファイル入力ストリームです。

1.読み取り方法を調べる

       まず、InputStreamクラスには抽象メソッドがあります。abstractintread()

       このメソッドは、バイトを読み取って読み取ったバイトを返すか、入力の終わりに達したときに-1を返します。注:InputStreamが実際に直接使用されることはめったにないため、ほとんどの場合、InputStreamのサブクラスを使用します。その中で最も一般的に使用されるのはFileInputStreamで、FileInputStreamクラスがInputStreamクラスのreadメソッドをオーバーライドします。

参考として、JDKのソースコードを次に示します。

       InputStreamのread()ソースコード:

       @Override
            public int read() throws IOException {
                ensureOpen();
                return -1;
            }

        次の図のコメント部分は次のように述べています。この入力ストリームから1バイトのデータを読み取ります。読み取りに使用できる入力がない場合、このメソッドはブロックします。次のバイトを返します。ファイルの終わりに達すると、-1が返されます。

    /**
     * Reads a byte of data from this input stream. This method blocks
     * if no input is yet available.
     *
     * @return     the next byte of data, or {@code -1} if the end of the
     *             file is reached.
     * @throws     IOException  if an I/O error occurs.
     */
    public int read() throws IOException {
        return read0();
    }

具体的な例を以下に示します。

IDEAを開き(邪悪なEclipseを使用しないでください、これはまったく良くありません)、テキストファイルTest.txtを作成します。ファイルの内容は次のとおりです。こんにちは!

Test.javaファイルを作成するには、最初にファイルオブジェクトを作成する必要があります。Filefile= new File( "E:\\ sprayingproblem \\ Test.txt");

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\喷涂问题\\Test.txt");
        FileInputStream in=new FileInputStream(file);
        int read = in.read();
        System.out.println(read);
    }
}

出力:72。

         なぜ数値が出力されるのか不思議に思う人がいるかもしれません。実際、これはH文字に対応するASCIIコードです!

テーブルを検索した後、H、e、l、l、o、!の対応するASCIIコードは72101 108 108 111 33であるため、整数型を文字型に変換するだけで済みます。

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\喷涂问题\\Test.txt");
        FileInputStream in=new FileInputStream(file);
        int read = in.read();
        char text=(char)read;
        System.out.println(text);
    }
}

         したがって、次のように出力できます:H

 

2、readAllBytes方法

            上記の例のようにreadメソッドのみを使用する場合は、「H」、「E」、「L」を読み取る必要があります...明らかに、速度が遅すぎて不便です。そのため、Java9以降、readAllBytes()メソッドが提供されていますこのメソッドは、入力ストリーム内のすべての文字をバイト配列に直接読み取りますそうすれば、変換によってテキスト情報を一度に出力できます!

import java.io.*;
public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\喷涂问题\\Test.txt");
        FileInputStream in=new FileInputStream(file);
        byte[] bytes = in.readAllBytes();
        for (byte Byte : bytes) {
            char c=(char)Byte;
            System.out.print(c);
        }
    }
}

コンソール出力:

 

 

次に、ファイル出力ストリーム

        次に、前の入力ストリームの全体的な手順を継続的に説明しましょう。

1.テキストファイルを作成し、テキストの段落を入力しますHello!

2.入力ストリームを介してテキスト情報をバイト配列byte []に​​読み込みます。

- - - - - - - - - - - - - - - - - - - - - - -分割線 - - ---------------------------------------------

        出力ストリームはどうですか?

        もちろん、その逆です!つまり、すでにバイト配列にあるデータを空のテキストファイルに出力します

前のものに基づいて例を挙げてください:

1.最初に空のテキストファイルReadFromTest.txtを作成します。

2.空のファイルを表すオブジェクトfile2を作成し、out.write()メソッドを呼び出します。出力ストリームが新しいファイルにバインドされており、バイト配列を出力ストリームに書き込むことは、に書き込むことと同じであることが理解できます。新しいファイル。

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException {
        File file1 = new File("E:\\喷涂问题\\Test.txt");
        FileInputStream in=new FileInputStream(file1);
        byte[] bytes = in.readAllBytes();
//以上部分的代码将原来Test.txt中的hello!转移到字符数组bytes中了

        File file2 = new File("E:\\喷涂问题\\ReadFromTest.txt");
        FileOutputStream out = new FileOutputStream(file2);
        out.write(bytes);
    }
}

3.上記のコードを実行すると、テキストメッセージHello!が新しいファイルReadFromTest.txtに表示されます。

コードが文字化けしている理由がわからない場合は、コードを削除する方法を知っている友人がメッセージ領域にコメントできます。

おすすめ

転載: blog.csdn.net/Zhongtongyi/article/details/108022372