2013-07-08 155 views
0

我想寫我的Java控制檯輸出到我的桌面上的.txt文件。 但是,當該方法啓動時,我有控制檯輸出和txt文件被創建,但它是空的,我意識到BufferedReader(in)不工作...(因爲「ok1 - i」語句)寫控制檯輸出到.txt文件

問題是爲什麼?或者我的代碼有什麼錯誤? 這是我的代碼,所以你可以看到並運行它

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); 

    } 
} 
} 

感謝您的時間,請幫我解決我的問題。

+1

+1的noobxd包名;) –

+0

@UncleIroh HAHAH笑那是因爲這是基於一個「額外的應用程序」幫我導出txt文件在我的Java-SQL中使用應用(主要的,可以導入一個txt文件),所以這只是在控制檯,然後我把它命名爲noobxd – Mgustavoxd1

回答

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

將來,請學會使用調試工具,並且只需仔細閱讀您的代碼。如果你想讀,直到EOF,使用

while ((inputLine = in.readLine()) != null) { 
    ... 
} 
+0

好,但如果我將此設置爲'(while(inputLine.isEmpty()))'輸出只是 。 .. 'TEL221-TopicNumber27-55-Lab' 'TEL280-TopicNumber28-58-Practice' 'TEL174-TopicNumber29-51-Lab' 'Starting' 'ok10' – Mgustavoxd1

+0

@ user2161991好嗎?我不知道它應該是什麼...... – Zong

+0

它應該像一個「標誌」,告訴我,如果該方法已經正確執行,所以這個輸出(只是ok1 0)(首先確定當行i = 0 (第一行))我知道我已經進入while語句,但是'inputLine = in.readLine()'方法沒有執行 – Mgustavoxd1

0

如果你想不斷循環,直到用戶在控制檯輸入一個空行,你可能要像

while (true) { 
     System.out.println("ok1"+i); 
     inputLine = in.readLine(); 
     if (inputLine.isEmpty()) 
      break; 
     // the rest of your loop 
} 
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(); 
} 
+0

我做了你所說的,但仍然'inputLine = in.readLine();'沒有執行,我不知道爲什麼 – Mgustavoxd1