0

为什么 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

4 回答 4

0

以下2对于将数据刷新到文件并关闭流很重要

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

问候,

于 2013-04-19T00:10:01.727 回答
0

你忘了关闭它:

out.close()
于 2013-04-19T00:05:18.970 回答
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;

如果从未满足该条件,则不会将任何内容写入文件。

于 2013-04-19T00:27:22.900 回答
0

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

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

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

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

于 2013-04-19T00:28:52.663 回答