目前在我的应用程序中,我将一堆数据存储在内存中,最后通过ArrayList
将数据写入文件,并将数据转储到文件中。我怎样才能动态写入数据,但我不希望它存储在某些文件指针内存中。我希望它在应用程序运行时写入磁盘。试图将内存成本降至最低。如果有必要,我可以通过简短的讲座来了解文件指针如何在Java中工作。
感谢。
答案 0 :(得分:4)
我不确定我理解你的问题,但一般来说,这就是你如何“即时”将数据写入磁盘。
编辑回答评论中的问题。
我希望在应用程序运行时将数据流式传输到磁盘,并且如果应用程序在执行过程中崩溃,则数据本身不会丢失。
好吧,如果应用程序崩溃,你可能会丢失最后一行或缓冲区。您可以使用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();
}
}
}
答案 1 :(得分:0)
您正在寻找的可能是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();
}
}
答案 2 :(得分:0)
您可能想尝试使用
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();
答案 3 :(得分:0)
您可以使用以下代码将ArrayList转储到文件中:
施工ro应用程序开始时间:
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