4

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

我想这样做一个星期。因此,我正在收集大量数据。对该程序进行 3 分钟的测试,生成了一个 100MB 的文本文件。我有 4 TB 的空间,我不能使用更多。

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

我提议的是打开一个文本文件,然后将 HTML 写入其中,经常检查它的大小。如果它变得大于,比如说 200MB,我关闭文本文件并打开另一个。我还需要记录我总共使用了多少空间,这样我就可以确保我不会接近 4 TB。

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

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

4

7 回答 7

5

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

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

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

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

该链为您提供了两个可以注入包装器的位置:您可以包装 writer 以获取字符数或内部OutputStream以获取写入的字节数。

于 2011-11-21T16:02:46.220 回答
4

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

于 2011-11-21T16:13:04.780 回答
3

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

于 2011-11-21T16:03:17.453 回答
3

HTML 将很容易以高压缩比进行压缩。考虑使用GZIPOutputStream来“最小化”您的文本文件占用的空间。

于 2011-11-21T16:03:48.973 回答
2

你有没有想过要计算你写入文件的字节数?

于 2011-11-21T16:01:22.373 回答
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());

    }

}

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

于 2011-11-21T16:11:08.240 回答
0

抱歉有点跑题了:

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

于 2011-11-21T16:10:25.513 回答