gpt4 book ai didi

java - 在 Java 中处理大文本文件

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:10 25 4
gpt4 key购买 nike

我想知道如果我们假设文件大小大于内存,您如何在 Java 中操作大文本文件。我用谷歌搜索了那个主题,它表明大多数人推荐 java.nio 来完成这样的任务。

不幸的是,我还没有找到任何关于如何操作文件的文档。例如读取每一行,修改它,写它。我试过这样的东西,但这不起作用:

    FileChannel fileChannel = null;
try {
fileChannel = new RandomAccessFile(file, "rw").getChannel();
ByteBuffer buffer = ByteBuffer.allocate(256);

while (fileChannel.read(buffer) != -1) {
buffer.rewind();
buffer.flip();
String nextLine = buffer.asCharBuffer().toString();
if (replaceBackSlashes) {
nextLine = nextLine.replace("\\\\", "/");
}
if (!(removeEmptyLines && StringUtils.isEmpty(nextLine))) {
buffer.flip();
buffer.asCharBuffer().put(nextLine);
}

buffer.clear();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (fileChannel != null) {
try {
fileChannel.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

那么您有什么建议呢?此外,字符串 nextline 与我的文件中的任何内容都不匹配。也许我需要设置编码?

最佳答案

逐行。像这样的……

public static void main(String[] args) throws Exception {

File someFile = new File("someFile.txt");
File temp = File.createTempFile(someFile.getName(), null);
BufferedReader reader = null;
PrintStream writer = null;

try {
reader = new BufferedReader(new FileReader(someFile));
writer = new PrintStream(temp);

String line;
while ((line = reader.readLine())!=null) {
// manipulate line
writer.println(line);
}
}
finally {
if (writer!=null) writer.close();
if (reader!=null) reader.close();
}
if (!someFile.delete()) throw new Exception("Failed to remove " + someFile.getName());
if (!temp.renameTo(someFile)) throw new Exception("Failed to replace " + someFile.getName());
}

关于java - 在 Java 中处理大文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14215435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com