2011-11-21 29 views
4

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

我想这样做一个星期。所以我正在收集大量的数据。测试程序3分钟产生100MB的文本文件。我有4TB的空间,我不能用这个以上。

另外,我不希望文本文件变得太大,因为我认为他们会成为未打开。

我所建议是打开一个文本文件,并写入HTML它,经常检查其大小。如果它变得比200MB更大,我关闭文本文件并打开另一个文件。我还需要记录总共使用了多少空间,以便我可以确保不会接近4 TB。

我在这一点上的问题是如何检查的文本文件的大小的文件已经被关闭前(使用FileWriter.close())。有没有这个功能,或者我应该计算写入文件的字符数量并使用它来估计文件大小?

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

+2

一个单独的问题应该是一个单独的问题。 – beny23

回答

5

创建,其对写入的字符数的作家,用它来包装你OutputStreamWriter

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

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

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

这条链给你两个地方,你可以注入你的包装:你可以用笔者拿到的字符或内OutputStream的数量来获得写入的字节。

+0

好的,谢谢。我会试试这个。我怎么知道角色需要多少个字节? – Andrew

+0

如果您处理英文网页,每个字符需要一个字节。 UTF-8编码非常紧凑。但是你也可以包装你的'FileOutputStream'来代替它。 –

+0

好的。我会试着尝试这个。我要计算字符的方式(也许这不是正确的方法)是通过对每个字符串使用Java字符串长度方法来保持运行总数,我写入文件 – Andrew

2

是否发生了你计算你写入文件的字节数?

+0

我想这基本上是我想要做的,我想我是通过计算写入文件的字符数来完成的,正如Aaron所建议的那样。 – Andrew

+0

是的,我也投票赞成亚伦的回答。我认为这是做到这一点的方法。 – Thom

3

,尽量减少空间,你可以zip与Java的文本文件。为什么不在关闭它后将每个文件添加到zip文件中?在压缩之后,您可以检查压缩文件的大小以查看您的累计存储消耗量。

+0

谢谢!如此明显,但我甚至没有想过它 – Andrew

3

HTML将以高压缩比轻松压缩。考虑使用GZIPOutputStream来最小化文本文件占用的空间量。

+0

谢谢。我会研究这个。 – Andrew

0

道歉的是有点偏题:

它是否必须在Java?这取决于你如何让你的饲料数据,这听起来像一个相当简单的shell脚本工作对我来说(grepfgrep为压缩检查关键字,gzip ......)

+0

我认为最好坚持使用Java,因为我相当熟悉Java,其他一切都是用Java编写的 – Andrew

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()); 

    } 

} 

这个例子表明,如果您正在使用一个文件编写器,您可以在写入和打开编辑器的同时实时获取其大小。如果你想节省空间,你可以压缩流。

3

我继续给亚伦的答案。你可以使用CountingOutputStream:使用CountingOutputStream包装你的FileOutputStream,你就可以知道你已经写了多少个字节。

相关问题