递归算法和文件行列算法ITeye - AG环亚娱乐集团

递归算法和文件行列算法ITeye

2019年03月26日12时41分43秒 | 作者: 千风 | 标签: 文件,行列,文件夹 | 浏览: 1554

public static void fileCopy(File sourFile, File destDir){ if(sourFile null || destDir null) return; //在方针途径下创立被仿制的文件 File destFile = new File(destDir, sourFile.getName()); //运用字节流完结任何文件的仿制操作 //创立字节输入流方针 BufferedInputStream in = null; //创立字节输出流方针 BufferedOutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(sourFile)); out = new BufferedOutputStream(new FileOutputStream(destFile)); //运用字节数组开端频频的读写操作 byte[] by = new byte[1024]; int len; while((len = in.read(by)) != -1){ out.write(by, 0, len); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ //开释资源 closeFileResource(in, out); * 开释文件操作的资源 * @param in 字节输入流方针 * @param out 字节输出流方针 private static void closeFileResource(InputStream in, OutputStream out){ try { if(in != null){ in.close(); if(out != null){ out.close(); } catch (IOException e) { e.printStackTrace(); * 运用递归算法遍历多级文件夹下的一切文件 * @param folder 要求遍历的文件夹 * @param fileList 用来寄存文件夹中一切文件的列表调集 public static void listAllFile_D(File folder, ArrayList File fileList){ if(folder null || fileList null) return; //遍历某一级文件目录的一切文件目录, 假如是是文件,则添加到列表中, 不然持续递归遍历 File[] files = folder.listFiles(); for(File file : files){ if(file.isFile()){ fileList.add(file); }else{ listAllFile_D(file,fileList); * 运用文件行列算法遍历多级文件夹下的一切文件 * @param folder 要求遍历的文件夹 * @return 回来寄存一切文件的列表调集 public static List File listAllFile_Q(File folder){ if(folder null) return null; //创立文件的列表调集, 用来寄存文件, 并作为回来值回来 ArrayList File fileList = new ArrayList File //创立文件行列, 用来寄存各级文件目录 MyQueue File fileQueue = new MyQueue File //首先把榜首级文件目录添加到文件行列中 fileQueue.add(folder); //遍历文件行列 while(!fileQueue.isQueueEmpty()){ //从文件行列中取出一个文件目录 File dir = fileQueue.remove(); //遍历该级文件目录 File[] files = dir.listFiles(); for(File file : files){ if(file.isFile()){ //假如是文件, 则添加到文件列表中 fileList.add(file); }else{ //假如是文件夹, 则添加到文件行列中 fileQueue.add(file); //回来文件列表 return fileList; * 运用递归算法删去多级文件夹 * @param folder 要被删去的文件夹 public static void deleteFolder_D(File folder){ if(folder null) return; //遍历文件目录 File[] files = folder.listFiles(); for(File file : files){ if(file.isFile()){ //假如是文件, 直接删去 file.delete(); }else{ //假如是文件夹, 则递归删去 deleteFolder_D(file); folder.delete(); * 运用文件行列算法删去多级文件夹 * @param folder 要被删去的文件夹 public static void deleteFolder_Q(File folder){ if(folder null) return; //创立文件行列, 将榜首级文件夹添加到文件行列中 MyQueue File fileQueue = new MyQueue File fileQueue.add(folder); //遍历文件行列 while(!(fileQueue.isQueueEmpty())){ //从文件行列中取出一个文件夹 File dir = fileQueue.remove(); //遍历文件目录 File[] files = dir.listFiles(); //假如该目录为空,直接删去, 不然从头添加到行列中 if(files.length 0){ dir.delete();//目录为空时,直接删去文件夹 }else{ fileQueue.add(dir);//不为空时,再次添加到行列中,并持续遍历 for(File file : files){ if(file.isFile()){ file.delete(); }else{ fileQueue.add(file); * 运用递归算法仿制文件夹 * @param sourFolder 要被仿制的文件夹 * @param destDir 仿制后寄存的方针途径 public static void copyFolder_D(File sourFolder, File destDir){ if(sourFolder null || destDir null) return; //创立方针途径下的单级文件夹 File destfolder = new File(destDir, sourFolder.getName()); destfolder.mkdir(); //遍历某一级文件夹下的每一个文件目录, 假如是文件,则仿制,假如是文件夹,则持续调用copyFolder()办法 File[] files = sourFolder.listFiles(); for(File file : files){ if(file.isFile()){ fileCopy(file, destfolder); }else{ copyFolder_D(file, destfolder); * 运用文件行列算法仿制多级文件夹 * @param sourFolder 要被仿制的文件夹 * @param destDir 仿制后寄存的方针途径 public static void copyFolder_Q(File sourFolder, File destDir){ if(sourFolder null || destDir null) return; // 创立文件行列 MyQueue File fileQueue = new MyQueue File // 将被仿制的文件添加到文件行列中 fileQueue.add(sourFolder); // 获取要被仿制文件夹的途径中除掉文件夹称号之外的字符串 // 如文件夹途径"E:\MyJavaStudy\JavaFileTest", 处理之后取得的字符串为"E:\MyJavaStudy\" int length = sourFolder.getAbsolutePath().length() - sourFolder.getName().length(); String s = sourFolder.getAbsolutePath().substring(0, length); // 遍历文件行列 while (!fileQueue.isQueueEmpty()) { // 从文件行列中拿出一个文件夹 File dir = fileQueue.remove(); // 确认方针文件夹的途径 // 方针文件夹途径的字符串方式为 destPath的文件途径名 + dir的途径全名减去字符串s File path = new File(destDir.getAbsolutePath().concat(dir.getAbsolutePath().substring(s.length()))); // 创立方针文件夹途径 path.mkdirs(); // 遍历文件夹, 获取一切的文件及文件夹 File[] files = dir.listFiles(); for (File file : files) { // 假如是文件,直接将文件仿制到方针文件夹途径中 if (file.isFile()) { fileCopy(file, path);// 将文件file仿制到途径path下 } else { // 假如是文件夹,则将该文件夹加入到文件行列中 fileQueue.add(file);
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章