我试图在我的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();
}
}
答案 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 ..