2017-03-02 97 views
0

我试图用Java编写预约书程序,但是BufferedWriter似乎没有写入文件。如何让BufferedWriter写入文本文件?

此代码是一个try { } catch (FileNotFoundException) { } catch (IOException) { }

FileWriter writer = new FileWriter("Appointments" + name + ".txt", true); 
BufferedWriter bufferedWriter = new BufferedWriter(writer); 

if (open == 'o') { 
    FileReader reader = new FileReader("Appointments" + name + ".txt"); 
    BufferedReader bufferedReader = new BufferedReader(reader); 
    while ((line = bufferedReader.readLine()) != null) { 
     if (line.indexOf("one-time") == line.length() - 8) { 
      OneTime o = fromStringOneTime(line); 
      oneTimes.add(o); 
     } 
     if (line.indexOf("daily") == line.length() - 5) { 
      Daily d = fromStringDaily(line); 
      dailys.add(d); 
     } 
     if (line.indexOf("monthly") == line.length() - 7) { 
      Monthly m = fromStringMonthly(line); 
      monthlys.add(m); 
     } 
    } 
} 

的while循环刚初始化所有值的当前在文件分成3周不同的ArrayLists的所有内部。

然后我的代码来创建新的对象块,一旦你选择要添加预约(变量descdate先前已经被定义):

System.out.print("Enter if this is a (o)ne-time, (d)aily, or (m)onthly appointment: "); 
freq = scanner.next().charAt(0); 
if (freq == 'o') { 
    OneTime o = new OneTime(desc, date.getDate()); 
    oneTimes.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} else if (freq == 'd') { 
    Daily o = new Daily(desc, date.getDate()); 
    dailys.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} else if (freq == 'm') { 
    Monthly o = new Monthly(desc, date.getDate()); 
    monthlys.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} 

在的结束尝试块,我有行reader.close()writer.close()。那么为什么当我检查应该保存的文件时,它仍然显示为空白?这是我第一次处理文件保存问题,所以我不确定它为什么没有按照应有的方式工作。 。

编辑:如果选择打开,而不是创建一个新的

+0

您无法同时读取和写入文件大多数操作系统。 – EJP

+0

那么,如果我在完成使用后立即关闭阅读器,它会起作用吗?因为我只需要将它用于初始化,在我放入我的帖子的第一个代码块中。 – RoboticPlayer

+0

您可以尝试写入具有不同文件名的文件,并在程序结束时将其重命名为 – GrabNewTech

回答

0

是,大多数操作系统不会允许读取和写入同一个文件中的现有文件的选项文件将现在只读。因此,您可以通过写入临时文件名的文件来解决此问题,并在程序结束时将其重命名为原始文件。

try { 
    FileWriter writer = new FileWriter("Appointments" + name + "1.txt", true); 
    FileReader reader = new FileReader("Appointments" + name + ".txt"); 
    BufferedReader bufferedReader= new BufferedReader(reader); 
    BufferedWriter bufferedWriter = new BufferedWriter(writer); 
    ....... 
} catch() { 
    ...... 
} finally { 
    bufferedReader.close(); 
    bufferedWriter.flush(); 
    bufferedWriter.close(); 
} 

// Rename the file and delete temp file 
File srcFile = new File("Appointments" + name + "1.txt"); 
File targerFile = new File("Appointments" + name + ".txt"); 
srcFile.renameTo(targetFile); 
srcFile.delete(); 
+0

试过了,该文件仍然是空的。附加'1'的第二个文件被创建,但我从未看到任何存储在其中的内容。 – RoboticPlayer

+0

你有没有为bufferedWriter调用flush()或close()? – GrabNewTech

+0

是的,我打电话给他们。 – RoboticPlayer

相关问题