最近做SSH2框架整合做文件上传下载功能时选择使用了Struts2框架的上传组件,结果出现了文件上传成功,可源文件是有2K可上传后的文件却变成了2G的情况,让人纠结了好久,最终终于发现了问题所在,是一个地方自己理解的不够清楚才出现了这样的情况。
private static boolean copy(File updFilePath, File saveFilePath) {
boolean result=false;
InputStream in=null;
OutputStream out=null;
try {
in=new BufferedInputStream(new FileInputStream(updFilePath),BUFFER_SIZE);
out=new BufferedOutputStream(new FileOutputStream(saveFilePath),BUFFER_SIZE);
byte[] buffer=new byte[BUFFER_SIZE];
int len=0;
//len=in.read(buffer); //注意len的赋值要放在while中,因为len的值是动态赋予的
while(0<(len=in.read(buffer) )){//注意本行和上一行的区别,如果len在上一行赋值则在while中
out.write(buffer,0,len);
}
result=true;
} catch (Exception e) {
result=false;
e.printStackTrace();
}finally{
try {
if(out!=null){out.close();}
if(in!=null){in.close();}
} catch (IOException e) {e.printStackTrace();}
}
return result;
}
代码如上,之前我对当前读取文件长度的定义放在了while循环的外边,结果就出现了while死循环一直向上传后的文件中写入len长度的内容问题,结果就 悲催了,上传后的文件变得异常大。