Java IO文字ストリームの概要2

ここに画像の説明を挿入

文字ストリーム

バイトストリームを使用してテキストを読み取る場合、特に中国語の文字に遭遇した場合、中国語の文字が複数バイトのストレージを占有する可能性があるため、完全な文字が表示されないことがあります
。Javaはいくつかの文字ストリームクラスを提供しています。ユニットはデータを読み書きし、テキストファイルに特化します

文字入力ストリーム[リーダー]

java.io.Reader抽象クラスは、文字情報をメモリに読み込むことができる文字ストリームの読み取りに使用されるすべてのクラスのスーパークラスを表し、文字入力ストリームの基本的な共通メソッドを定義します

ここに画像の説明を挿入

ファイル文字入力ストリーム[FileReader]

ハードディスクファイルのデータを文字モードでメモリに読み込みます

次の画像はそのコンストラクタ
ここに画像の説明を挿入
です!使い方!

public class Demo01Reader {

    public static void main(String[] args) throws IOException {
        Reader reader = new FileReader("F:\\cccc.txt");
        // 存储读取1024个字符
        char[] chars = new char[1024];
        int len = 0;
        // 当读到文件结尾时候  len==-1
        while ((len = reader.read(chars)) != -1) {
            System.out.println(new String(chars, 0, len));
        }
        reader.close();
    }
}

結果は正しいです!

ここに画像の説明を挿入

文字出力ストリーム[ライター]

java.io.Writer抽象クラスは、文字ストリームの書き込みに使用されるすべてのクラスのスーパークラスを表し、文字情報をメモリに読み込んで、文字入力ストリームの基本的な共通メソッドを定義します

ここに画像の説明を挿入

ファイル文字出力ストリーム[FileWriter]

java.io.FileWriterクラスは、構築中にシステムのデフォルトの文字エンコーディングとデフォルトのバイトバッファーを使用して、ファイルに文字を書き込むのに便利なクラスです。

次の画像はそのコンストラクタです

ここに画像の説明を挿入
文字出力ストリームの使用ポイント:

  • FileWriterオブジェクトを作成し、宛先をバインドしてコンストラクターにデータを書き込みます
  • FileWriterのメソッドライターを使用してデータをメモリバッファーに書き込む(文字をバイトに変換するプロセス)
  • FileWriterのメソッドflushを使用して、メモリバッファー内のデータをファイルにフラッシュします。
  • リソースを解放します(この前に、メモリバッファー内のデータはファイルに更新されます)

使い方

public class Demo02Writer {

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

        Writer writer = new FileWriter("F:\\cccc.txt");
        writer.write("囧囧是世界上最漂亮的女孩");
        writer.close();

    }
}

正常に書き込み、前のファイルの内容を置き換えます

ここに画像の説明を挿入

閉じて更新しました

組み込みバッファのため、出力ストリームを閉じないと、ファイルに文字を書き込むことはできませんが、閉じたストリームオブジェクトはデータの書き込みを続けることができません。
データを書き込みたい場合は、別のテクノロジーでストリームを使用する必要があります。フラッシュ方式

  • flush:バッファをフラッシュします。ストリームオブジェクトは引き続き使用できます
  • close:最初にバッファを更新してから、システムにリソースを解放するよう通知します。ストリームオブジェクトは使用できなくなります
public class Demo02Writer {

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

        Writer writer = new FileWriter("F:\\cccc.txt");
        writer.write("囧囧是世界上最漂亮的女孩");
        writer.flush();
        writer.write("囧囧是世界上最漂亮的女孩-2");
        writer.close();

    }
}

ここに画像の説明を挿入

注:flush()メソッドを最初に呼び出すと、バッファデータが強制的にファイルに書き込まれます。closeを呼び出した後は、データの書き込みを続けることはできません。

執筆とラッピングを続ける

FileOutputStreamと同様に、ブールコンストラクターがあり、
追加する場合はfalse、追加しない場合はfalseです
ここに画像の説明を挿入
コードオン!

public class Demo02Writer {

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

        Writer writer = new FileWriter("F:\\cccc.txt", true);
        writer.write("囧囧是世界上最漂亮的女孩" + "\r\n");
        writer.flush();
        writer.write("————囧囧是世界上最豆的女孩!" + "\r\n");
        writer.close();

    }
}

結果が追加されます!

ここに画像の説明を挿入

jdk 9対jdk 7

jdk7の書き込み方法は、try ... with ...リソースで使用できることがわかっていますが、ここでは説明しませんが、非常に簡単です。
次に、jdk 9の新しい書き込み方法を見てみましょう。

上記のコードはまだファイルをコピーする例です!

public class Demo05FileInputStream {

    public static void main(String[] args) throws FileNotFoundException {
        FileInputStream fis = new FileInputStream("F:\\cccc.txt");
        FileOutputStream fos = new FileOutputStream("F:\\dddd.txt");

		// jdk 9 的新语法,支持将流放入圆括号中,省略了finally关闭流的操作
        try (fis; fos) {
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("复制成功");

    }
}
元の記事24件を公開 賞賛された33件 訪問2391件

おすすめ

転載: blog.csdn.net/weixin_41241629/article/details/104336002