2013-09-27 77 views
0

在下面的代碼:關閉輸出流'行爲不端'?

for(int i = 5; i <= 100; i+=5) 
    { 
     linearSurprise(i); // Function calling 'System.out.print()' 

     System.setOut(outStream); // Reassigns the "standard" output stream. 

     System.out.println("Value of i: " + i); // Outputting the value to the .txt file. 

     outStream.close(); // 'outStrem' is closed so that when I recall my function, output will 
          // will be sent to the console and not file. 

     // After debugging, I notice that nothing is being displayed to either the console or file, 
     // but everything else is still working fine. 
    } 

我打電話的功能「linearSurprise」,並在該函數I輸出一些信息到控制檯。一旦函數調用結束,我將'i'的值重定向到一個文本文件。這適用於循環的第一次迭代,但只要我調用'outStream.close()',就不會在下一次迭代(控制檯或文件)中顯示任何輸出。有誰知道爲什麼會發生這種情況?另外什麼是解決這個問題的方法?

+1

你爲什麼要寫System.out?你爲什麼不直接寫入文件? – vikingsteve

+0

包含更多代碼,以便我們可以看到大圖。 – hasan83

回答

2

關閉OutputStream你的循環,並System.out現在是封閉的;您必須重新分配一個開放的OutputStream以便能夠編寫更多輸出。

爲此,您應該直接寫入FileOutputStream;將System.out重定向到它沒有任何價值,並且會導致像這樣的問題。

PrintStream outStream = new PrintStream(File outputFile); 
for(int i = 5; i <= 100; i += 5) 
{ 
    linearSurprise(i); 
    outStream.println("Value of i: " + i); 
} 
outStream.close(); 
0

您可以嘗試outStream.flush()而不是outStream.close()內部循環。它可能工作。由於outStream.close();將關閉您的文件。完成循環後最好關閉。

0

既然你調用close()流佈置因此不再存在了

1

循環後關閉文件

outStream.close(); 
+0

我試圖在輸出到txt文件和控制檯之間切換,這就是爲什麼它在循環.... – fYre

+0

編輯你的答案,包括linearSurprise代碼 – hasan83

2

這個假設是無效的:

'outStrem'已關閉,因此當我回想起我的功能時,輸出將被髮送到控制檯 而不是文件。

爲什麼它會神奇地回到控制檯?它只會被寫入封閉流,這將導致一個異常,被PrintStream吞噬。

如果你想設置回原來的控制檯流,你需要做的是明確的:

PrintStream originalOutput = System.out; 

// Do stuff... 

System.setOut(originalOutput); // Now we can write back to the console again 
1
System.setOut(outStream); // Reassigns the "standard" output stream. 
for(int i = 5; i <= 100; i+=5) 
    { 
     linearSurprise(i); // Function call 


     System.out.println("Value of i: " + i); // Outputting the value to the .txt file. 

will 
          // will be sent to the console and not file. 

     // After debugging, I notice that nothing is being displayed to either the console or file, 
     // but everything else is still working fine. 
    } 
    outStream.close(); // 'outStrem' is closed so that when I recall my function, output 

如果關閉outStream您完成後,一個後寫它,而不是迭代它應該工作。

+0

我試圖在輸出到txt文件和控制檯之間切換,這就是爲什麼它在循環中...... – fYre

+0

一旦你關閉了流,你需要創建一個新的能夠寫信給它。 – AppX

0

打印到文件如下:

outStream.println("What ever you want"); 

和環路後關閉流。

Dont't setOut(outStream);