在Java中切换文本文件中的两行



我已经陷入困境一段时间了,我终于决定寻求帮助。所以我有一个小文本文件,用户想从中切换2行,用户输入这2行的索引,我必须切换它们。到目前为止,我的想法是使用带有2个正则表达式的replaceALL,但A:这可能不会切换它们,而是最终用另一个替换一个,留下一个重复,B:我不知道如何使用regex定位第n行;或者使用-Files.readAllLines(Paths.get(name)).get(index);以获得两条线路,但我仍在为实际的切换过程而挣扎。

您可以使用

  • Files.readAllLines以列表形式获取所有行
  • 交换列表中的两个元素。例如Collections.swap
  • 将所有行写回以更新文件

如果你需要能够处理大文件,你可以

  • 使用RandomAccessFile通过从文件的开头读取来查找所需行的开头/结尾
  • 把这两行字读入缓冲区
  • 把这两行写在适当的位置,但要互换

如果您正在处理一个大文件并需要节省内存,您可以这样做(尽管如果第二个交换行接近文件末尾,可能需要更长的时间):

File myFile = new File(somePath);
File outputFile = new File(someOtherPath);//this is where the new version will be stored
BufferedReader in = new BufferedReader(new FileReader(myFile));
PrintWriter out = new PrintWriter(outputFile);
String line;
String swapLine;//first line to swap
int index = -1;//so that the first line will have an index of 0
while((line = in.readLine()) != null){
    index++;
    if(index == firstIndex){//if this line is the first line to swap
        swapLine = line;//store the first swap line for later
        //Create a new reader. This one will read until it finds the second swap line.
        BufferedReader in2 = new BufferedReader(new FileReader(myFile));
        int index2 = -1;
        while(index2 != secondIndex){
            index2++;
            line = in.readLine();
        }
        //The while loop will terminate once line is equal to the second swap line
    }else if(index == secondIndex)//if this line is the second swap line{
        line = swapLine;
        //this way the PrintWriter will write the first swap line instead of the second
    }
    out.println(line);
}

当然,您可以通过编程删除myFile,然后将outputFile重命名为磁盘上myFile的名称:

myFile.delete();
outputFile.renameTo(myFile);

我相信这是有效的,但我还没有测试过。

相关内容

  • 没有找到相关文章

最新更新