2013-04-19 113 views
0

爲什麼ArrayList沒有寫入「MyCalendar.txt」?即使當我使用out.write()它仍然返回false但不寫入文件。爲什麼我的ArrayList沒有保存到我的文件中?

import java.util.*; 
import java.io.*; 

public static Boolean addAppointment(ArrayList<String> calendar, 
        String specifiedDay, 
         String specifiedTime) { 

PrintWriter out = new PrintWriter("myCalendar.txt"); //declare calendar file  


    for (int i = 0; i<calendar.size(); i++) { 
     String index = calendar.get(i); 
     if (index.equals(specifiedDay + "" + specifiedTime)) 
     { 
     out.println(specifiedDay + "" + specifiedTime); 
     return false; 
     } 
    } 
    return true; 
} 
+1

你應該有'PrintWriter out = new PrintWriter(「myCalendar.txt」);''try'/'catch'包圍。 – syb0rg

回答

0

低於2是很重要的數據刷新到文件,並關閉流

out.flush(); 
out.close(); 

問候,

+0

關閉流會自動刷新流。 – syb0rg

+0

你也是對的。 –

+0

謝謝!在課堂上我們從未被教過沖洗數據,但那顯然是我需要做的。另外,我用out.write(specifiedDay + specifiedTime +'\ n')將它保存在文件中。 – user2297278

0

你忘了關閉它:

out.close() 
+0

在關閉之前,您可能還需要'out.flush()'。 –

+0

@Joe,在關閉流之前自動關閉內容到文件。所以沖洗是可選的。 –

0

所以,一對夫婦這裏的東西。

如果您使用的是Java 7,則應考慮使用try-with-resources。這完全確保您的PrintWriter在完成後關閉。

try (PrintWriter out = new PrintWriter("somefile.txt")) { 
    // code 
} catch (FileNotFoundException e) { 
    System.out.println("Bang!"); 
} 

接下來,是在該文件無法寫入到少數情況下,無論是部分或全部:

  • calendar.size() == 0
  • index.equals(specifiedDay + "" + specifiedTime)

如果第一個條件滿足,沒有任何東西被寫入,該方法愉快地返回true。可能不是你所期望的。

如果滿足第二個條件,則編寫第一個元素,並提前返回。在循環條件中放置它可能是一個更好的主意,並且在循環完成時返回返回值。

int i = 0; 
boolean good = true; 
while(good && i < calendar.size()) { 
    // critical actions 
    String index = calendar.get(i); 
    if(index.equals(specifiedDay + "" + specifiedTime)) { 
     good = false; 
    } 
} 
// other code 
return good; 

如果條件是從未滿足,那麼沒有什麼是永遠寫入文件。

0

PrintWriter的默認行爲不是自動刷新緩衝區。有關更多詳細信息,請參見PrintWriter Documentation

或者,你可能有一個數據問題:

String index = calendar.get(i); 
if (index.equals(specifiedDay + "" + specifiedTime)) 

如果這個條件不滿足,你會不會打印任何東西了。你確定這個條件是真的嗎?

相關問題