Java文本文件大小(文件关闭之前)

时间:2011-11-21 15:59:03

标签: java file filewriter file-writing

我从一项服务中收集完整的HTML,该服务提供对大量博客和新闻网站的访问。我正在检查HTML(实时),看它是否包含一些关键字。如果它包含其中一个关键字,我会将HTML写入文本文件以存储它。

我想这样做一个星期。因此我收集了大量数据。测试程序3分钟产生100MB的文本文件。我有4 TB的空间,我不能使用超过这个。

另外,我不希望文本文件变得太大,因为我认为它们将变得不可打开。

我建议打开一个文本文件,并向其中写入HTML,经常检查它的大小。如果它变大,比方说200MB,我关闭文本文件并打开另一个。我还需要保存一个运行日志,记录我总共使用了多少空间,以便确保我不会接近4 TB。

我现在的问题是如何在文件关闭之前检查文本文件的大小(使用FileWriter.close())。是否有这样的功能,还是应该计算写入文件的字符数并使用它来估算文件大小?

一个单独的问题:有没有办法减少文本文件占用的空间量?我在Java工作。

7 个答案:

答案 0 :(得分:5)

创建一个编写器,用于计算写入的字符数,并使用它来包装OutputStreamWriter

[编辑] 注意:将文本保存到文件的正确方法是:

new BufferedWriter( new OutputStreamWriter( new FileOutputStream( file ), encoding ) ) );

编码很重要;它通常是“UTF-8”。

这个链为您提供了两个可以注入包装器的地方:您可以包装编写器以获取字符数,或者包裹内部OutputStream以获取写入的字节。

答案 1 :(得分:3)

为了最大限度地减少空间,您可以使用Java zip文本文件。关闭后,为什么不将每个文件添加到zip文件中。压缩后,您可以检查zip的大小以查看累积的存储消耗。

答案 2 :(得分:3)

HTML将以高压缩率轻松压缩。考虑使用GZIPOutputStream来“减少文本文件占用的空间量”。

答案 3 :(得分:3)

我继续接受亚伦的回答。您可以使用CountingOutputStream:只需使用CountingOutputStream包装FileOutputStream,您就可以知道已经编写了多少字节。

答案 4 :(得分:2)

您是否计算过您写入文件的字节数?

答案 5 :(得分:1)

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


public class TestFileWriter {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        FileWriter fileWriter= new FileWriter("test.txt");
        for (int i=0; i<1000; i++) {
            fileWriter.write("a very long string, a very long string, a very long string, a very long string, a very long string\n");
            if ((i%100)==0) {
                File file=new File("test.txt");
                System.out.println("file size=" +  file.length());
            }
        }
        fileWriter.close();
        File file=new File("test.txt");
        System.out.println("file size=" +  file.length());

    }

}

此示例演示如果您使用的是文件编写器,则可以在写入时以及打开编写器时实时获取其大小。如果你想节省空间,你可以压缩流。

答案 6 :(得分:0)

略微偏离主题道歉:

是否必须使用Java?根据您获取Feed数据的方式,这听起来像是一个相当简单的shell脚本的工作(grepfgrep用于检查关键字,gzip用于压缩...)