2013-11-09 49 views
1

如何在文本文件中追加现有行?如果要编辑的行位于文件的中间怎么办?根据以下代码,请提供建议。如何在文本文件中追加现有行

必须通过&去尝试了以下内容:

我的代码:

filePath = new File("").getAbsolutePath(); 
    BufferedReader reader = new BufferedReader(new FileReader(filePath + "/src/DBTextFiles/Customer.txt")); 
    try 
    {       
     String line = null;   
     while ((line = reader.readLine()) != null) 
     { 
      if (!(line.startsWith("*"))) 
      { 
       //System.out.println(line); 

       //check if target customer exists, via 2 fields - customer name, contact number 
       if ((line.equals(customername)) && (reader.readLine().equals(String.valueOf(customermobilenumber)))) 
       { 
        System.out.println ("\nWelcome (Existing User) " + line + "!"); 

        //w target customer, alter total number of bookings @ 5th line of 'Customer.txt', by reading lines sequentially 
        reader.readLine(); 
        reader.readLine(); 
        int total_no_of_bookings = Integer.valueOf(reader.readLine()); 

        System.out.println (total_no_of_bookings); 
        reader.close(); 
        valid = true; 


        //append total number of bookings (5th line) of target customer @ 'Customer.txt' 
        try { 
         BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath + "/src/DBTextFiles/Customer.txt"))); 
         writer.write(total_no_of_bookings + 1); 
         //writer.write("\n"); 
         writer.close(); 
        } 
        catch (IOException ex) 
        { 
         ex.printStackTrace(); 
        } 
        //finally 
        // { 
         //writer.close(); 
        //} 
       }     
      } 
     }  

回答

1

的reader.readLine()方法递增每次调用的时间线。我不确定这是否适用于您的程序,但您可能需要将reader.readline()作为字符串存储,因此只能调用一次。

要在文本文件的中间追加一行,我相信您将不得不重新编写文本文件直到您想要追加行的位置,然后继续编写文件的其余部分。这可以通过将整个文件存储在字符串数组中,然后写入某个点来实现。写作

例子:

BufferedWriter writer = new BufferedWriter(new FileWriter(new File(path))); 
writer.write(someStuff); 
writer.write("\n"); 
writer.close(); 
+0

readline()是故意让我到达所需的路线。至于实现,我该如何重写文本文件并写下剩余的内容?请举例吗?或者这适用? - http://www.raghuwansh.com/2013/07/10/write-text-file-in-java/ – user2945412

+0

你可以使用BufferedWriter – grimrader22

+1

检查我的编辑。这有帮助吗? – grimrader22

2

为了能够追加内容到现有的文件,你需要在附加m中打开它颂。例如使用FileWriter(String fileName, boolean append)并将true作为第二个参数。

如果行在中间,则需要将整个文件读入内存,然后在完成所有编辑时将其写回。

这可能适用于小文件,但如果您的文件太大,那么我会建议将实际内容和编辑内容写入临时文件,完成后删除旧文件重命名临时文件为与旧的名称相同。

+0

+1“完成后删除旧的一个重命名临时文件是与旧的名称相同的名称”:) – async

0

AFAIK你不能这样做。我的意思是,追加一条线是可能的,但不能插入中间。这与java或其他语言无关......文件是一串写入的字节......如果您在某个任意点插入某些内容,那么该序列不再有效并需要重新写入。

所以基本上,你必须创建一个函数来做到这一点读插片,改写

1

或许你也应该遵循的答案,您发布的第二个链接的建议。你可以使用random access file来访问文件的中间部分,但是如果你开始在文件中间的任意位置追加而不记录开始写入时的内容,那么你将覆盖它的当前内容,如this answer。最好的办法是,除非有问题的文件难以处理,否则就像其他人以前所建议的那样,使用现有文件和新数据汇编一个新文件。