【发布时间】:2016-05-20 13:38:13
【问题描述】:
我有一项任务,我创建了一个程序来销售和订购电子设备,并在新的销售/订单完成时更新两个文本文件。
我找到了一种更新文本文件而不是覆盖它的方法,因此任何旧订单/销售都不会丢失,新订单/销售将添加到文件末尾,但我的任务要求我将文本文件放在如下形式:
SALES
{
SALE
{
(Sale info here)
}
SALE
{
(Another sale info here)
}
}
SALES { } 需要在整个文件中出现一次,我需要使用每个 SALE { } 更新文件。我能做到吗 作者只在 SALES } 之后(因此在第 3 行)和 } 之前(所以在倒数第二行)写入,即使在重新启动应用程序之后?
这是我作者的部分代码:
File file1= null;
BufferedWriter writer=null;
try {
file1=new File(path);
}
catch (NullPointerException e) {
System.err.println ("Not Found.");
}
try {
writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file1, true)));
}
catch (FileNotFoundException e) {
System.err.println("Error opening file for writing.");
}
try
{
writer.write("SALES " + "\n" + "{");
//Writer writes sale info here
writer.write("\n" + "}");
}
catch (IOException e) {
System.err.println("Write error!");
}
基本上到目前为止,每次我运行程序时它都会创建 SALES{ },这是我不想要的。
我想到的另一种方法基本上是使用以下内容开始文件:
SALES
{
}
然后用每个新订单覆盖最后一行,在每次执行结束时,我将在最后添加另一个 },这将关闭上面的 SALES {。但我也不知道该怎么做。
对不起,如果这听起来很业余。提前感谢您的任何回答。
【问题讨论】:
-
也请分享您的代码
-
添加了我作者的部分代码。
-
通常人们通过写一个新文件然后重命名来解决这个问题。在你的情况下这可能吗?
-
@Alexander 你是什么意思?我想到的唯一方法是让作者写入一个临时文件,然后在第 2 行和主要销售文件的最后一行之间复制整个文件。但我也不知道该怎么做。
-
我不确定,但这可以通过以下方式完成,读取文件并初始化对象或对象集合,将新对象(条目)添加到该集合。将集合写入文件。
标签: java bufferedwriter