使用java限制文件大小创建

时间:2013-07-19 12:29:10

标签: java file size bufferedwriter

我试图在我的java应用程序中限制一个文件的大小创建。为此我制作了这个示例代码,我声明了一个32字节的变量长度,启动WriteOnFile方法循环它直到32字节。问题是,我在FILE_SIZE(更高或更低)上设置的值无关紧要,下载文件总是带有400kb - 这意味着我的代码正在工作,因为原始文件是200Mb但有一些逻辑错误。还有另外一种方法吗?我自己是基于这篇文章How to limit the file size in Java,直到现在找不到更好的

我想知道这是否与缓冲区有关...

提前感谢您的帮助

public static final byte FILE_SIZE = 32;   

 private static void WriteOnFile(BufferedWriter writer, String crawlingNode){

               try {
                   while(file.length()<FILE_SIZE){

                    writer.write(crawlingNode);
                    System.out.println(file.length());
                   }
            } catch (IOException e) {

                JOptionPane.showMessageDialog(null, "Failed to write URL Node");
                    e.printStackTrace();            
            }

           }

3 个答案:

答案 0 :(得分:1)

我只是尝试了一下,我可以通过直接限制BufferedWriter的写入方法来编写32字节大的文件:

        writer.write(crawlingNode, 0, 32);

通过该调用,只有前32个字符被写入文件。由于我的编码是UTF-8,这意味着每个字符占用一个字节,我输出文件的大小只有32个字节。仅写入16个字符会产生16字节的文件,依此类推。

所以也许你可以在没有实现其他重要内容的情况下使用它。

修改

如果您的String的字符数少于32,请使用以下调用:

writer.write(crawlingNode, 0, crawlingNode.length);

答案 1 :(得分:0)

使用流来限制文件大小,不要依赖file.length()。

Apache Commons有http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/output/CountingOutputStream.html

但你也可以轻松编写自己的。

答案 2 :(得分:0)

我找到了自己的答案。是的,这必须是Buffered writer。缓冲写入器的READ默认缓冲区为8kb。在我的应用案例中,每隔400kb就会转储写入此缓冲区。要编写一个较小尺寸的文件,我们需要使用另一种方式来编写 OutputSteam ..