附加到Java

时间:2016-05-20 13:38:13

标签: java bufferedwriter

我有一项任务,我已经创建了一个程序来销售和订购电子设备,并在新的销售/订单发布时更新两个文本文件。

我找到了一种更新文本文件的方法,而不是覆盖它,因此任何旧的订单/销售都不会丢失,而新的订单/销售会被添加到文件的末尾,但我的任务要求我将文本文件放在文件的末尾。以下表格:

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 {。但我也不知道该怎么做。

很抱歉,如果这听起来非常业余。先谢谢你的回答。

2 个答案:

答案 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
    }

然后以" +} +"

结束

对我来说,最好总是在这种情况下创建一个新文件。