注释处,请大家帮忙看下.最后想问下,下面的catch用哪个Exception比较好?
private static File copyFolder(String oldPath, String newPath){

File newFile = new File(newPath);
try{
newFile.mkdir();
File oldFolder = new File(oldPath);
String[] allFileName = oldFolder.list();

File temp = null;

for(int i = 0; i < allFileName.length; i++){
if(oldPath.endsWith(System.getProperty("file.separator"))){
temp = new File(oldPath + allFileName[i]);
}else{
temp = new File(oldPath + System.getProperty("file.separator") + allFileName[i]);
}
if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);

FileOutputStream output = new FileOutputStream(newPath + System.getProperty("file.separator")
+ (temp.getName()).toString());

BufferedReader inputReader = new BufferedReader(new InputStreamReader(input));  
BufferedWriter outputWriter = new BufferedWriter(new OutputStreamWriter(output));

char[] data = new char[1024*5];  //1、不知道这个大小合不合适

int len = 0;

while((len = inputReader.read(data)) != -1){
outputWriter.write(data, 0, len);
}
output.flush(); //2、这下全关闭了吗?
output.close();
input.close();
inputReader.close();
//outputWriter.close();  //3、这里必须注释掉才能运行
}
if(temp.isDirectory()){
copyFolder(oldPath + System.getProperty("file.separator") + allFileName[i], 
newPath + System.getProperty("file.separator") + allFileName[i]);
}
}
}catch(Exception e){
e.printStackTrace();
System.out.println("复制出现错误!");
}
return newFile;

解决方案 »

  1.   

    inputReader封装了new InputStreamReader(input)),楼主在inputReader.close()之前已经有input.close(),这样我觉得inputReader已经被关闭了,不用再重新写inputReader.close()
      

  2.   

                        output.flush(); // 这个只是刷新,不是关闭
                        output.close(); // 这里已经把输出关闭了
                        input.close(); // 输入关闭
                        inputReader.close();
                        outputWriter.close();  // 重复关闭,也许内部实现没有考虑到重复关闭问题?我想看看你的异常输出是什么?可惜你没有贴出来,可惜了。
      

  3.   

    为什么没人回答,下面catch的异常,用哪个比较好呢~