使用java模仿dos窗口命令,实现文件的拷贝,删除,列出所有文件.下面看一下效果:
我们需要三个类,每个类实现不同的功能,首先是复制文件类,就是我们上一篇文章的代码,只是现在接受命令行参数.实际上javaIO操作文件夹的难点就在于,java提供的操作都是针对空文件夹或者文件.比如删除,复制.所以当我们想复制文件夹或者删除文件夹就需要使用递归操作.
public class Copy { public static void main(String args[]){ File src = new File(args[0]); File dest = new File(args[1]); copyDirAndFire(src,dest); } /** *实现文件拷贝 * @param src 源路径 * @param dest 目标路径 */ public static void copyFile(File src,File dest){ InputStream in = null; OutputStream out = null; try { in = new FileInputStream(src); out = new FileOutputStream(dest); int len = 0; byte[] car = new byte[1024]; while((len = in.read(car))!=-1){ out.write(car, 0, len); out.flush(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** *实现文件夹拷贝 * @param src 源路径 * @param dest 目标路径 */ public static void copyDirAndFire(File src, File dest){ //判断源路径是否为空 if(src==null){ return; } //构造目标路径 File target = new File(dest,src.getName()); //判断源路径是否为文件夹 if(src.isDirectory()){ target.mkdirs(); File[] files = src.listFiles(); for(File f:files){ copyDirAndFire(f, target); } }else{ Copy.copyFile(src, target); } } }
第二个是列出文件目录:
import java.io.*; public class ListDir { public static void main(String args[]){ File file = new File(args[0]); //File file = new File("F:\\"); list(file); } public static void list(File file){ if(file.isDirectory())//判断file是否是目录 { File [] lists = file.listFiles(); if(lists!=null) { for(int i=0;i<lists.length;i++) { list(lists[i]);//是目录就递归进入目录内再进行判断 } } } System.out.println(file);//file不是目录,就输出它的路径名,这是递归的出口 } }
第三个是删除文件
import java.io.*; public class Delete{ public static void main(String args[]){ File file = new File(args[0]); deleteDir(file); } //删除空的文件夹或者文件 public static void deleteEmptyDir(File file){ file.delete(); } //递归删除文件夹 public static void deleteDir(File file){ //判断是否为文件 if(file.isDirectory()){ //列出所有的子文件 File[] files = file.listFiles(); if(files!=null){ for (int i = 0; i < files.length; i++) { //删除子文件 if (files[i].isFile()) { deleteEmptyDir(files[i]); } //删除子目录 else { deleteDir(files[i]); } } } deleteEmptyDir(file); }else{ deleteEmptyDir(file); } } }