如何交换文件中两行的位置 Java 直接访问行
How to swap position for two lines in a file Java accessing directly to the lines
我需要交换直接访问它们的文件中两行的位置。
我文件中的所有行都具有相同的字节大小,我知道每一行的位置,因为它们的大小都相同,但我需要直接指向它们而无需遍历所有文件。
所以我需要知道如何定位自己以及如何读取和删除它们,我真的找不到我理解的解决方案。
提前致谢。
示例:
我想交换第二行和第四行。
文件内容:
1;first line ; 1
2;second line ; 1
3;third ; 2
4;fourth ; 2
5;fifth ; 2
外观应该如何:
1;first line ; 1
4;fourth ; 2
3;third ; 2
2;second line ; 1
5;fifth ; 2
纯粹的教育示例。不要在生产中使用类似的东西。请改用图书馆。
总之,关注我的评论。
文件示例
ciaocio=1
edoardo=2
lolloee=3
目标
ciaocio=1
lolloee=3
edoardo=2
final int lineSeparatorLength = System.getProperty("line.separator").getBytes().length;
// 9 = line length in bytes without separator
final int lineLength = 9 + lineSeparatorLength;
try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
// Position the cursor at the beginning of the first line to swap
raf.seek(lineLength);
// Read the first line to swap
final byte[] firstLine = new byte[lineLength];
raf.read(firstLine);
// Position the cursor at the beginning of the second line
raf.seek(lineLength * 2);
// Read second line
final byte[] secondLine = new byte[lineLength];
raf.read(secondLine);
// Move the cursor back to the first line
// and override with the second line
raf.seek(lineLength);
raf.write(secondLine);
// Move the cursor to the second line
// and override with the first
raf.seek(lineLength * 2);
raf.write(firstLine);
}
我需要交换直接访问它们的文件中两行的位置。
我文件中的所有行都具有相同的字节大小,我知道每一行的位置,因为它们的大小都相同,但我需要直接指向它们而无需遍历所有文件。
所以我需要知道如何定位自己以及如何读取和删除它们,我真的找不到我理解的解决方案。
提前致谢。
示例: 我想交换第二行和第四行。
文件内容:
1;first line ; 1
2;second line ; 1
3;third ; 2
4;fourth ; 2
5;fifth ; 2
外观应该如何:
1;first line ; 1
4;fourth ; 2
3;third ; 2
2;second line ; 1
5;fifth ; 2
纯粹的教育示例。不要在生产中使用类似的东西。请改用图书馆。 总之,关注我的评论。
文件示例
ciaocio=1
edoardo=2
lolloee=3
目标
ciaocio=1
lolloee=3
edoardo=2
final int lineSeparatorLength = System.getProperty("line.separator").getBytes().length;
// 9 = line length in bytes without separator
final int lineLength = 9 + lineSeparatorLength;
try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
// Position the cursor at the beginning of the first line to swap
raf.seek(lineLength);
// Read the first line to swap
final byte[] firstLine = new byte[lineLength];
raf.read(firstLine);
// Position the cursor at the beginning of the second line
raf.seek(lineLength * 2);
// Read second line
final byte[] secondLine = new byte[lineLength];
raf.read(secondLine);
// Move the cursor back to the first line
// and override with the second line
raf.seek(lineLength);
raf.write(secondLine);
// Move the cursor to the second line
// and override with the first
raf.seek(lineLength * 2);
raf.write(firstLine);
}