

下のプログラムはは3つのファイル(txt1,txt2,txt3)を読み込んでコンソールに出力し、別の3つ(txt4,txt5,txt6)のファイルを作って書き込むプログラムです。コンソールには出力され、ファイルも作られるのですが、ファイルの中身が3つとも"null"となってしまいます。なぜでしょうか？

[code]

     import java.io.*;
    
    class test {
    public static void main(String[] args) {
    
    try {     
    BufferedReader reader = new BufferedReader(new FileReader("txt1.txt"));
    BufferedReader reader1 = new BufferedReader(new FileReader("txt2.txt"));
    BufferedReader reader2 = new BufferedReader(new FileReader("txt3.txt"));
    
    String line;
    
    while( null !=(line=reader.readLine())) {
        System.out.println(line);
    }
    
    String line1;
    while( null !=(line1=reader1.readLine())) {
        System.out.println(line1);
    }
    
    String line2;
    
    while( null !=(line2=reader2.readLine())) {
        System.out.println(line2);
    }
    
    reader.close();
    reader1.close();
    reader2.close();
    
    File file=new File("txt4.txt");
    File file1=new File("txt5.txt");
    File file2=new File("txt6.txt");
    file.createNewFile();
    file1.createNewFile();
    file2.createNewFile();
    PrintWriter writer=new PrintWriter(new BufferedWriter(new FileWriter(file)));
    PrintWriter writer1=new PrintWriter(new BufferedWriter(new FileWriter(file1)));
    PrintWriter writer2=new PrintWriter(new BufferedWriter(new FileWriter(file2)));
    
    writer.println(line);
    writer1.println(line1);
    writer2.println(line2);
    
    writer.close();
    writer1.close();
    writer2.close();
    }
    
    catch(IOException e) {}
    
    }
    }   
    
[/code]


CC BY-SA 4.0
2022-10-26T13:41:51.300
91841
2022-10-26T16:06:27.613
2022-10-26T14:01:08.307
7347
55051
question
java
ファイルの書き出しができません！


例えば変数 `line` について見てみると、

[code]

    String line;
    
    while( null !=(line=reader.readLine())) {
        System.out.println(line);
    }
    
[/code]

`line` が `null` でない限り上記の `while` ループ内の処理を実行し続けます。  
逆にいうと、 `while` ループを抜けたとき、 `line` は必ず `null` です。

ですので、後続の処理

[code]

    writer.println(line);
    
[/code]

を実行するときの `line` の値も当然 `null` です。

* * *
[code]

    while( null !=(line=reader.readLine())) {
        System.out.println(line);
    }
    
[/code]

でコンソールに出力している値をファイルに書き出したいので、ファイル出力もここで行ってしまえばよいでしょう。

[code]

    import java.io.*;
    
    class test {
        public static void main(String[] args) {
    
            try {
                BufferedReader reader = new BufferedReader(new FileReader("txt1.txt"));
                BufferedReader reader1 = new BufferedReader(new FileReader("txt2.txt"));
                BufferedReader reader2 = new BufferedReader(new FileReader("txt3.txt"));
                
                File file = new File("txt4.txt");
                File file1 = new File("txt5.txt");
                File file2 = new File("txt6.txt");
                file.createNewFile();
                file1.createNewFile();
                file2.createNewFile();
                PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(file)));
                PrintWriter writer1 = new PrintWriter(new BufferedWriter(new FileWriter(file1)));
                PrintWriter writer2 = new PrintWriter(new BufferedWriter(new FileWriter(file2)));
    
    
                String line;
    
                while (null != (line = reader.readLine())) {
                    System.out.println(line);
                    writer.println(line);
                }
    
                String line1;
                while (null != (line1 = reader1.readLine())) {
                    System.out.println(line1);
                    writer1.println(line1);
                }
    
                String line2;
    
                while (null != (line2 = reader2.readLine())) {
                    System.out.println(line2);
                    writer2.println(line2);
                }
    
                reader.close();
                reader1.close();
                reader2.close();
    
    
    
                writer.close();
                writer1.close();
                writer2.close();
            }
    
            catch (IOException e) {
            }
    
        }
    }
    
[/code]


CC BY-SA 4.0
2022-10-26T16:06:27.613
91843
2022-10-26T16:06:27.613
2808
91841
answer