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

Java 为什么我的ArrayList没有保存到我的文件中?,java,arraylist,printwriter,Java,Arraylist,Printwriter,为什么ArrayList没有写入“MyCalendar.txt”?即使使用out.write(),它仍然返回false,但不会写入文件 import java.util.*; import java.io.*; public static Boolean addAppointment(ArrayList<String> calendar, String specifiedDay, Stri

为什么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;
}
import java.util.*;
导入java.io.*;
公共静态布尔添加约会(ArrayList日历,
字符串指定日期,
字符串指定时间){
PrintWriter out=new PrintWriter(“myCalendar.txt”);//声明日历文件

对于(int i=0;i您忘记关闭它:

out.close()

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

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

关于,这里有几件事

如果你使用java 7,你应该考虑使用。这绝对可以确保你的代码>打印机WT/ID>在你完成之后关闭。

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;
inti=0;
布尔好=真;
while(good&&i

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

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

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;
}
或者,您可能会遇到数据问题:

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

如果不满足此条件,您将不会打印任何内容。是否确保此条件为真?

您可能还需要
out.flush()
关闭之前。@Joe,关闭会在关闭流之前自动将内容刷新到文件中。因此刷新是可选的。关闭流将自动刷新流。谢谢!我们从未在课堂上被教过刷新数据,但这显然是我需要做的。此外,我还使用了out.write(specifiedDay+specifiedTime+'\n')将其保存在文件中。如果使用out.println,则不需要\n。因为println表示打印行并终止。但是如果使用out.write()然后,您需要使用\n写入行并终止。因此,下一次写入将从新行开始。关于这一点,您应该有
PrintWriter out=new PrintWriter(“myCalendar.txt”);
周围有
try
/
catch