0
我正在編寫一個程序,通過網絡將文件從一臺PC複製到另一臺PC。當這個文件複製正在進行時,我向用戶顯示進度以及動態複製了多少文件(在JSP中完成)。在服務器端,我使用的是Java,而且對於大多數文件來說工作都很順利,但是如果我遇到了一個50 MB的文件,我打了一些牆,而我的程序只是在那裏呆了一段時間,它最終開始寫入輸出儘管流。這是由於只是將文件加載到輸入流中?我知道這個文件有點大,所以不知道我能做些什麼。下面是我用來將文件複製到服務器的代碼。任何建議或幫助將不勝感激。完全打開重新設計這個東西,我只想讓它很容易讀取複製的文件進度。使用FileInputStream麻煩複制大文件
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)。我會將跟蹤添加到代碼看看發生了什麼。 – 2014-11-23 15:54:41