【发布时间】:2014-11-24 00:36:46
【问题描述】:
我正在编写一个程序,它通过网络将文件从一台 PC 复制到另一台 PC。在进行此文件复制时,我会向用户显示进度以及动态复制了多少文件(在 JSP 中完成)。在服务器端,我使用的是 Java,大多数文件都运行良好,但是如果我遇到一个 50 MB 的文件,我会碰到一些墙,我的程序只是在那里坐了一会儿,它最终开始写入输出流虽然。这是因为只是将文件加载到输入流中吗?我知道文件有点大,所以不确定我能做些什么。下面是我用来将文件复制到服务器的代码。任何建议或帮助将不胜感激。完全开放重新设计这个东西我只是想让它易于阅读复制过来的文件进度。
FileInputStream fin = null;
FileOutputStream fout = null;
int length = (int)srcFile.length();
int counter = 0;
int r = 0;
byte[] b = new byte[4096];
try
{
fin = new FileInputStream(srcFile);
fout = new FileOutputStream(dd);
int progressVal = 0;
while((r = fin.read(b)) != - 1)
{
counter += r;
fout.write(b,0,r);
progressVal = (counter * 100/length);
if(progressVal > 0)
{
//communicate to JSP
WorkstationController.progressMade = progressVal;
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
fin.close();
fout.close();
}
【问题讨论】:
-
“撞墙”是什么意思。如果您的意思是进度条停留在 0 一段时间,这是意料之中的,因为在进度变为 1 之前,它需要读取和写入至少 1% 的文件(500 KB)。我会添加跟踪到代码来看看发生了什么。
标签: java file copy fileinputstream fileoutputstream