我有一项任务,我已经创建了一个程序来销售和订购电子设备,并在新的销售/订单发布时更新两个文本文件。
我找到了一种更新文本文件的方法,而不是覆盖它,因此任何旧的订单/销售都不会丢失,而新的订单/销售会被添加到文件的末尾,但我的任务要求我将文本文件放在文件的末尾。以下表格:
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 {。但我也不知道该怎么做。
很抱歉,如果这听起来非常业余。先谢谢你的回答。
答案 0 :(得分:0)
您可以尝试的一种方法是检查" SALES {"字符串存在于您的文件中。如果存在,您可以直接写销售信息,否则写入整个文件。
您可以在代码中包含以下代码段,以逐行扫描文件,如下所示:
Scanner scanner = new Scanner(file1);
while(scanner.hasNextLine()){
if("SALES{".equals(scanner.nextLine().trim())){
//Writer writes sale info here
break;
}else{
writer.write("SALES " + "\n" + "{");
//Writer writes sale info here
writer.write("\n" + "}");
}
}
答案 1 :(得分:0)
首先,将其用作行分隔符:
String lineSeparator = System.getProperty("line.separator");
为什么呢?不同的系统使用不同的方法来分隔行(\ n< linux,\ r \ n< windows,\ r< mac)。
在您的代码中,您将更改de +" \ n" +更改为+ lineSeparator +。
编写此代码的最佳方法是使用Sale对象的集合(数组),然后您将通过此集合进行交互,如:
for(Sale sale : sales){
sale.getters // Infos
//write +\t+ (tab) and save infos
}
然后以" +} +"
结束对我来说,最好总是在这种情况下创建一个新文件。