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

时间:2016-08-01 15:55:23

标签: java file

我已经坚持了一段时间,我终于决定请求帮助了。 所以我有一个小文本文件,并且用户想要从中切换2行,用户输入2行的索引,我必须切换em。 到目前为止,我的想法是使用replaceALL和2个正则表达式 ,但是答:那可能不会切换它们但只是最终用另一个替换一个,留给我一个副本和B:我不知道如何使用正则表达式找到第n行; 或者使用 - Files.readAllLines(Paths.get(name))。get(index);得到这两条线然后我仍然在努力实际切换过程。

2 个答案:

答案 0 :(得分:2)

您可以使用

  • Files.readAllLines将所有行列为列表
  • 交换列表的两个元素。例如Collections.swap
  • 将所有行都写回来更新文件。

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

  • 使用RandomAccessFile通过读取文件的开头来查找所需行的开头/结尾。
  • 将两行读入缓冲区。
  • 将两条线写到位,但换了一圈。

答案 1 :(得分:0)

如果您正在处理大型文件并需要节省内存,则可以执行此操作(但如果第二个交换行靠近文件末尾可能需要更长时间):

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);

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