如何通过id java从文本行中删除一行

时间:2016-03-13 12:27:46

标签: java

如何从文本文件java中删除一行? 我到处搜索,即使我找不到删除线路的方法。 我有文本文件:a.txt

wedding.models.Guest

以及从互联网上获取的功能:

 1, Anaa, 23
 4, Mary, 3

}

其中fileName是a.txt的路径。 我必须删除导致id的行。这就是我拆分trimmedLine的原因。在执行结束时,我有两个文件,a.txt和myTempFile都有相同的行(从开始的那些)。为什么不能删除它?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你想删除其id与removeLineFromFile方法中传递的id匹配的行。

要使代码正常工作,只需要进行少量更改。

要提取ID,您需要使用" "","

进行拆分

           String trimmLine[] = trimmedLine.split(" |,");

其中|是正则表达式OR运算符。 请参阅Java: use split() with multiple delimiters

另外,trimmLine是一个数组,你不能只将trimmLine与lineToRemove进行比较。首先需要从trimmLine中提取第一部分id。如果您难以理解这一点,我建议您查看split方法的工作情况。您可以查看How to split a string in Java

因此,使用以下方法提取id作为数组trimmLine的第一个索引:

           String part1 = trimmLine[0];

然后将part1与lineToRemove进行比较。

整个代码如下:

public void removeLineFromFile(Long id){
   try{
      File inputFile = new File(fileName);
      File tempFile = new File("C:\\Users\\...myTempFile.txt");

      BufferedReader reader = new BufferedReader(new FileReader(inputFile));
      BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

      String lineToRemove = Objects.toString(id,null);
      String currentLine;

      while((currentLine = reader.readLine()) != null) {
          // trim newline when comparing with lineToRemove
          String trimmedLine = currentLine.trim();
          String trimmLine[] = trimmedLine.split(" |,");
          String part1 = trimmLine[0];

          if(!part1.equals(lineToRemove)) {
              writer.write(currentLine + System.getProperty("line.separator"));
          }
      }
      writer.close();
      reader.close();
      boolean successful = tempFile.renameTo(inputFile);
   }catch (IOException e){
   e.printStackTrace();
 }
}