我从一项服务中收集完整的HTML,该服务提供对大量博客和新闻网站的访问。我正在检查HTML(实时),看它是否包含一些关键字。如果它包含其中一个关键字,我会将HTML写入文本文件以存储它。
我想这样做一个星期。因此我收集了大量数据。测试程序3分钟产生100MB的文本文件。我有4 TB的空间,我不能使用超过这个。
另外,我不希望文本文件变得太大,因为我认为它们将变得不可打开。
我建议打开一个文本文件,并向其中写入HTML,经常检查它的大小。如果它变大,比方说200MB,我关闭文本文件并打开另一个。我还需要保存一个运行日志,记录我总共使用了多少空间,以便确保我不会接近4 TB。
我现在的问题是如何在文件关闭之前检查文本文件的大小(使用FileWriter.close())。是否有这样的功能,还是应该计算写入文件的字符数并使用它来估算文件大小?
一个单独的问题:有没有办法减少文本文件占用的空间量?我在Java工作。
答案 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脚本的工作(grep
或fgrep
用于检查关键字,gzip
用于压缩...)