java:在运行时跟踪文件大小?
我编写了一个将压缩对象写入文件的代码,我的问题是:有没有一种方法可以跟踪写入对象时文件大小的增量?这是我的代码:
public static void storeCompressedObjs(File outFile, ArrayList<Object[]> obj) {
FileOutputStream fos = null;
GZIPOutputStream gz = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(outFile);
gz = new GZIPOutputStream(fos);
oos = new ObjectOutputStream(gz);
for (Object str : obj) {
oos.writeObject(str);
oos.flush();
//I was hoping to print outFile.length() here, but it doesn't work
}
} catch (IOException e) {
e.printStackTrace();
} finally {
oos.close();
gz.close();
fos.close();
}
}
我尝试在每个 oos.writeObject(str); 之后使用 flush
,然后使用 outFile.length()< 获取文件大小/code>,但无论我如何刷新它,文件大小都保持不变,直到最后跳转到其最终大小。无论如何我可以修复它吗?谢谢
I wrote a code that writes compressed objects into a file, My questions is: is there a way that I could keep track of the increment of size of my file as the object being wrote in? here is my code:
public static void storeCompressedObjs(File outFile, ArrayList<Object[]> obj) {
FileOutputStream fos = null;
GZIPOutputStream gz = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(outFile);
gz = new GZIPOutputStream(fos);
oos = new ObjectOutputStream(gz);
for (Object str : obj) {
oos.writeObject(str);
oos.flush();
//I was hoping to print outFile.length() here, but it doesn't work
}
} catch (IOException e) {
e.printStackTrace();
} finally {
oos.close();
gz.close();
fos.close();
}
}
I tried to use flush
after every oos.writeObject(str);
and then get the file size by using outFile.length()
, but no matter how much I flush it, the file size remain unchanged until the last jump to its final size. Anyway that I could fix it? Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Apache Commons 项目提供了一个类 CountingOutputStream,您可以将其放入
OutputStream
链中。您甚至可以拥有其中两个:The Apache Commons project provides a class CountingOutputStream, which you can put into your chain of
OutputStream
s. You can even have two of them: