从文本文件中删除多行

时间:2017-08-29 17:39:48

标签: java

我正在尝试创建一个方法来删除我的txt文件中的一些文本。我首先检查文件中是否存在字符串:

public boolean ifConfigurationExists(String pathofFile, String configurationString)
    {
        Scanner scanner=new Scanner(pathofFile);
        List<String> list=new ArrayList<>();

        while(scanner.hasNextLine())
        {
            list.add(scanner.nextLine());
        }

        if(list.contains(configurationString))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

因为我要删除的字符串包含多行(String configurationString =&#34;这个\ n是一行\ n多行\ n字符串&#34 ;;)我开始创建一个新的字符串数组并拆分字符串成阵列成员。

public boolean deleteCurrentConfiguration(String pathofFile, String configurationString)
{
    String textStr[] = configurationString.split("\\r\\n|\\n|\\r");

    File inputFile = new File(pathofFile);
    File tempFile = new File("myTempFile.txt");

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

    String currentLine;

    while((currentLine = reader.readLine()) != null) {
        // trim newline when comparing with lineToRemove
        String trimmedLine = currentLine.trim();
        if(trimmedLine.equals(textStr[0])) continue;
        writer.write(currentLine + System.getProperty("line.separator"));
    }

    writer.close(); 
    reader.close(); 
    boolean successful = tempFile.renameTo(inputFile);

    return true;
} 

有人可以请教如何删除txt文件中的字符串以及字符串前后的行吗?

1 个答案:

答案 0 :(得分:0)

有很多不同的方法可以做到这一点,虽然我这样做的一种方法是首先将文件内容逐行读入一个字符串数组(看起来你已经这样做了),然后删除你没有的数据想要,并逐行写入你想要的新信息。

要删除您不想要的行之前的行,您不想要的行以及您不想要的行,您可以这样:

List<String> newLines=new ArrayList<>();
boolean lineRemoved = false;
for (int i=0, i < lines.length; i++) {
  if (i < lines.length-1 && lines.get(i+1).equals(lineToRemove)) {
    // this is the line before it
  } else if (lines.get(i).equals(lineToRemove)) {
    // this is the line itself
    lineRemoved = true;
  } else if (lineRemoved == true) {
    // this is the line after the line you want to remove
    lineRemoved = false; // set back to false so you don't remove every line after the one you want
  } else
    newLines.add(lines.get(i));
}
// now write newLines to file

请注意,此代码粗略且未经测试,但应该能够满足您的需求。