0

我试图限制在我的 java 应用程序中创建一个文件的大小。为此,我制作了这个示例代码,我声明了一个长度为 32 字节的变量,启动 WriteOnFile 方法循环它直到 32 字节。问题是,我在 FILE_SIZE 上设置的值(更高或更低)并不重要,下载文件总是带有 400kb - 这意味着我的代码可以正常工作,因为原始文件是 200Mb 但有一些逻辑错误。还有另一种方法吗?因为我基于这篇文章如何限制 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();            
            }

           }
4

3 回答 3

1

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

        writer.write(crawlingNode, 0, 32);

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

所以也许你可以在不实现其他一些大东西的情况下使用它。

编辑:

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

writer.write(crawlingNode, 0, crawlingNode.length);
于 2013-07-19T13:02:21.233 回答
0

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

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

但是您也可以轻松编写自己的代码。

于 2013-07-19T12:47:01.733 回答
0

我找到了自己的答案。是的,这必须与缓冲作家一起使用。Buffered writer 有一个 8kb 的默认缓冲区来读取。在我的应用程序案例中,每 400kb 会转储一次写入此缓冲区。要以较小的大小写入文件,我们需要使用另一种写入方式,例如OutputSteam ..

于 2013-07-19T13:50:01.843 回答