递归删除文件夹跟拷贝文件夹
删除文件:存在文件则直接删除返回true,如果不存在返回false
删除目录:
①:为空:直接删除
②:不为空:删不掉 (需要先删除文件夹里面所有文件,再删除文件夹)
③:不存在直接返回false
注意:delete方法 ==>直接从磁盘中删除,不能像回收站一样可以恢复!!
public static void main(String[] args) throws Exception { //源文件路径 File f1 = new File("F:\\Maven\\smbms"); //目标文件路径 File f2 = new File("H:\\Test"); //调用方法进行拷贝 folderCopy(f1, f2); } /** * 递归拷贝文件夹 * * @param oldFile 源文件夹 * @param newFile 目标文件夹 */ private static void folderCopy(File oldFile, File newFile) { //判断目标文件夹是否存在 if (!newFile.exists()) { newFile.mkdir(); } //获得源文件夹所有子文件 File[] srcFiles = oldFile.listFiles(); for (File srcFile : srcFiles) { //创建复制目标文件 File targetFile = new File(newFile.getAbsoluteFile() + "/" + srcFile.getName()); if (srcFile.isDirectory()) { //源文件为文件夹,目标文件创建文件夹 targetFile.mkdir(); //递归 folderCopy(srcFile, targetFile); } else { //不是文件夹,复制该文件(此处可以抽取为赋值文件方法) FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(srcFile); fos = new FileOutputStream(targetFile); byte[] bytes = new byte[1024]; int len = 0; while ((len = fis.read(bytes)) != -1) { fos.write(bytes, 0, len); fos.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { //关闭流 if (fos!=null){ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis!=null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } /** * 递归删除文件夹 * * @param file */ public static void deleteFile(File file) { //判断路径是否存在 if (file.exists()) { //测试此抽象路径名表示的文件是否是一个标准文件。 if (file.isFile()) { file.delete(); } else {//不是文件,对于文件夹的操作 //返回file路径下所有文件和文件夹的绝对路径 File[] listFiles = file.listFiles(); for (File file2 : listFiles) { /* * 递归作用:由外到内先一层一层删除里面的文件 再从最内层 反过来删除文件夹 * 注意:此时的文件夹在上一步的操作之后,里面的文件内容已全部删除 * 所以每一层的文件夹都是空的 ==》最后就可以直接删除了
*/ deleteFile(file2); } } file.delete(); } else { System.out.println("该file路径不存在!!"); } }