目前在我的应用程序中,我将一堆数据存储在内存中,最后通过遍历ArrayList
并将数据转储到文件指针中将其写入文件。我如何才能即时写入数据,但我不希望它存储在某些文件指针内存中。我希望在应用程序运行时将其写入磁盘。试图将内存成本保持在最低限度。如果有必要回答,我也可以参加关于文件指针如何在 Java 中工作的简短讲座。
谢谢。
目前在我的应用程序中,我将一堆数据存储在内存中,最后通过遍历ArrayList
并将数据转储到文件指针中将其写入文件。我如何才能即时写入数据,但我不希望它存储在某些文件指针内存中。我希望在应用程序运行时将其写入磁盘。试图将内存成本保持在最低限度。如果有必要回答,我也可以参加关于文件指针如何在 Java 中工作的简短讲座。
谢谢。
我不确定我是否理解您的问题,但通常,这就是您“即时”将数据写入磁盘的方式。
编辑以回答评论中的问题。
我希望在应用程序运行时将数据流式传输到磁盘,并且如果应用程序在执行过程中崩溃,数据本身不会丢失。
好吧,如果应用程序崩溃,您可能会丢失最后一行或缓冲区。即使应用程序崩溃,您也可以使用 finally 方法来确保关闭输出文件。
你能提供一个快速的代码示例吗?
当然。
public void writeOutput() {
boolean processRunning = true;
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = new BufferedWriter(new FileWriter("output.txt"));
while (processRunning) {
String s = generateOutput();
bufferedWriter.write(s);
if (s.equals("finished")) {
processRunning = false;
}
}
bufferedWriter.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedWriter != null) {
bufferedWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
您正在寻找的可能是FileChannel。
您可以使用该方法强制您写入的数据实际刷新到磁盘上force()
。
这是一个使用示例:
RandomAccessFile file = null;
try {
file = new RandomAccessFile("/home/user/mytempfile", "rw");
FileChannel channel = file.getChannel();
for (int i = 0; i < 100; i++) {
file.writeUTF("Hello");
channel.force(true);
}
} finally {
if (file != null) {
file.close();
}
}
您可能想尝试使用
java.io.FileStream 和 java.io.BufferedWriter
图书馆。
这是一个快速设置,可让您开始使用它们:
import java.io.*;
FileWriter fstream = new FileWriter("C:\\junkdirectory\\textdump.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write("This is a test!!");
out.close();
您可以使用以下代码将 ArrayList 转储到文件中:
在构建 ro App 启动时间:
final ObjectOutputStream fos = new ObjectOutputStream(
new FileOutputStream("data.dump", true));
在将数据写入文件时:
try {
fos.writeObject(list); // write your list to file
fos.flush();
} catch (IOException e) {
e.printStackTrace();
}
当您不再需要文件时(最后):
fos.close(); // surround with try-catch block