0

Java コンソールの出力をデスクトップの .txt ファイルに書き込もうとしています。しかし、そのメソッドが開始されると、コンソール出力があり、txt ファイルが作成されますが、空であり、BufferedReader (in) が機能していないことに気付きました... (「ok1 - i」ステートメントのため)

問題は、なぜですか?? または私のコードのどこが悪いのですか?? これは私のコードなので、表示して実行できます

   package noobxd;

   import java.io.BufferedReader;
   import java.io.BufferedWriter;
   import java.io.FileWriter;
   import java.io.IOException;
   import java.io.InputStreamReader;
   import java.util.Random;

   public class Main {

public static void main(String[] args) throws IOException {
    String path = "C:\\Users\\Mario\\Desktop\\output.txt";

    generate_codes();

    writetxt(path);
}

private static void writetxt(String path) throws IOException {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

    BufferedWriter out = new BufferedWriter(new FileWriter(path));
    try {
        String inputLine;
        inputLine = "";
        int i=0;
        System.out.println("Starting");
        while (!inputLine.isEmpty()){
            System.out.println("ok1"+i);
            inputLine = in.readLine();
            System.out.println("ok2"+i);
            out.write(inputLine);
            System.out.println("ok3"+i);
            out.newLine();
            System.out.println("ok4"+i);
            i++;
        }
        System.out.print("Write Successful");
    } catch (IOException e1) {
        System.out.println("Error during reading/writing");
    } finally {
        out.close();
        in.close();
    }
}

private static void generate_codes() {
    Random rnd = new Random();
    for (int i = 0; i < 30; i++) {
        int code = rnd.nextInt(201) + 100;
        int students = rnd.nextInt(31) + 40;
        int j = rnd.nextInt(4);
        String type = new String();
        switch (j) {
            case 0:
                type = "Theory";
                break;
            case 1:
                type = "Lab";
                break;
            case 2:
                type = "Practice";
                break;
            case 3:
                type = "Exam";
                break;
        }
        System.out.println("TEL" + code + "-TopicNumber" + i + "-" + students + "-" + type);

    }
}
}

お時間をいただきありがとうございます。私の問題を解決するのを手伝ってください。

4

3 に答える 3

2
String inputLine;
inputLine = "";
...
while (!inputLine.isEmpty())  // this is false and so the loop is not executed

将来的には、デバッグ ツールの使い方を学び、コードをもっと注意深く読んでください。EOF まで読み込もうとしている場合は、

while ((inputLine = in.readLine()) != null) {
    ...
}
于 2013-07-08T18:48:28.380 に答える
0

おそらく次のようなことをする必要があります:

inputLine = in.readLine();
while (inputLine != null && !inputLine.isEmpty()){
    System.out.println("ok1"+i);
    System.out.println("ok2"+i);
    out.write(inputLine);
    System.out.println("ok3"+i);
    out.newLine();
    System.out.println("ok4"+i);
    i++;
    inputLine = in.readLine();
}
于 2013-07-08T19:07:33.773 に答える
0

ユーザーがコンソールで空の行を入力するまでループし続けたい場合は、おそらく次のようなものが必要です

while (true) {
        System.out.println("ok1"+i);
        inputLine = in.readLine();
        if (inputLine.isEmpty()) 
            break;
        // the rest of your loop
}
于 2013-07-08T19:06:00.290 に答える