Java,如何动态编写文件

时间:2013-04-22 19:21:35

标签: java

目前在我的应用程序中,我将一堆数据存储在内存中,最后通过ArrayList将数据写入文件,并将数据转储到文件中。我怎样才能动态写入数据,但我不希望它存储在某些文件指针内存中。我希望它在应用程序运行时写入磁盘。试图将内存成本降至最低。如果有必要,我可以通过简短的讲座来了解文件指针如何在Java中工作。

感谢。

4 个答案:

答案 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