首先有一个非空的文件夹(内包含子文件夹,子文件夹内包含文件)
我将文件夹内的子文件夹拷贝出来,代码如下:
- Java code
public class DirCopy { private static final Logger logger = Logger.getLogger(DirCopy.class); public static boolean copy(String file1, String file2) { File in = new File(file1); File out = new File(file2); if (!in.exists()) { logger.error(in.getAbsolutePath() + "源文件路径错误!!!"); return false; } else { logger.debug("源文件路径" + in.getAbsolutePath()); logger.debug("目标路径" + out.getAbsolutePath()); } if (!out.exists()) out.mkdirs(); File[] file = in.listFiles(); FileInputStream fin = null; FileOutputStream fout = null; for (int i = 0; i < file.length; i++) { if (file[i].isFile()) { try { fin = new FileInputStream(file[i]); } catch (FileNotFoundException e) { logger.error("[execute()]catch:" + e.getMessage()); } System.out.println("in.name=" + file[i].getName()); try { fout = new FileOutputStream(new File(file2 + AppConfig.get("jr.dir.FileSeparator") + file[i].getName())); } catch (FileNotFoundException e) { logger.error("[execute()]catch:" + e.getMessage()); } //System.out.println(file2); int c; byte[] b = new byte[1024 * 5]; try { while ((c = fin.read(b)) != -1) { fout.write(b, 0, c); System.out.println("复制文件中!"); } fin.close(); fout.flush(); fout.close(); } catch (IOException e) { logger.error("[execute()]catch:" + e.getMessage()); } } else copy(file1 + AppConfig.get("jr.dir.FileSeparator") + file[i].getName(), file2 + AppConfig.get("jr.dir.FileSeparator") + file[i].getName()); } return true; }
然后删除该文件夹,代码如下:
- Java code
public static void deleteDir(File dir) { if (dir == null || !dir.exists() || !dir.isDirectory()) return; // 检查参数 for (File file : dir.listFiles()) { if (file.isFile()) file.delete(); // 删除所有文件 else if (file.isDirectory()) deleteDir(file); // 递规的方式删除文件夹 } dir.delete();// 删除目录本身 }
问题是:删除文件夹时,发现只能删除文件夹中的第一个子文件夹。IO流我查了,发现已经关闭了,用了Unlocker发现文件被占用。后来我改用while(!file.delete)发现文件是可以被删除的,但是要等好久,请大侠解释以上问题
------解决方案--------------------
从删除文件的代码上,没发现什么逻辑错误,有异常吗?
------解决方案--------------------
代码我感觉无问题,我自己也测试了下删除正常着哩,楼主是不是有窗口打开了要删除的某个目录?
------解决方案--------------------
dir.listFiles()
你是一遍列出来一边删除吧,感觉你的删除可能会多listFiles()结果有影响,可以尝试先list目录到数组中,然后迭代数组进行删除
------解决方案--------------------
文件不能调用file.listFiles(),只有文件夹才行。。
- Java code
public static void main(String[] args) { deleteFile(new File("e:\\")); } public static void deleteFile(File file) { if(file.isFile()) { file.delete(); } else { File[] files = file.listFiles(); for(File itemFile:files) { deleteFile(itemFile); } file.delete(); } }