1

目前在我的应用程序中,我将一堆数据存储在内存中,最后通过遍历ArrayList并将数据转储到文件指针中将其写入文件。我如何才能即时写入数据,但我不希望它存储在某些文件指针内存中。我希望在应用程序运行时将其写入磁盘。试图将内存成本保持在最低限度。如果有必要回答,我也可以参加关于文件指针如何在 Java 中工作的简短讲座。

谢谢。

4

4 回答 4

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();
        }
    }
}
于 2013-04-22T19:34:49.357 回答
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();
    }
}
于 2013-04-22T19:42:39.180 回答
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();
于 2013-04-22T19:49:22.117 回答
0

您可以使用以下代码将 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
于 2013-04-22T19:49:52.523 回答