为什么我的ArrayList没有保存到我的文件中?

时间:2013-04-19 00:01:03

标签: java arraylist printwriter

为什么没有将ArrayList写入“MyCalendar.txt”?即使我使用out.write(),它仍然返回false但不写入文件。

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

4 个答案:

答案 0 :(得分:0)

你忘了关闭它:

out.close()

答案 1 :(得分:0)

低于2对于将数据刷新到文件并关闭流

非常重要
out.flush();
out.close();

此致

答案 2 :(得分: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;

如果从未满足该条件,那么永远不会写入该文件。

答案 3 :(得分:0)

PrintWriter的默认行为不是自动刷新缓冲区。有关详细信息,请参阅PrintWriter Documentation

或者,您可能遇到数据问题:

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

如果不满足此条件,则不会打印任何内容。你确定这个条件是真的吗?