JAVA基础回顾2 遍历指定文件目录 遍历删除目录 指定文件清单列表

1,遍历指定目录,按格式化要求输出文件列表。


package yx.file;

import java.io.File;

//遍历每个目录下的所有文件夹和文件
public class GetAllFile {

	public static void main(String[] args) {
		File file = new File("D:\\Program Files\\Notepad++\\");
		listAll(file, 0);
	}

	private static void listAll(File dir, int level) {
		System.out.println(getSpace(level) + dir.getName());
		// 获取指定目录下当前的所有文件夹或者文件对象

		level++;
		File[] files = dir.listFiles();

		for (int x = 0; x < files.length; x++) {
			if (files[x].isDirectory()) {
				listAll(files[x], level);
			} else
				System.out.println(getSpace(level) + files[x].getName());
		}
	}

	private static String getSpace(int level) {
		StringBuilder sb = new StringBuilder();
		sb.append("|--");
		for (int x = 0; x < level; x++) {
			sb.insert(0, "|  ");
		}
		return sb.toString();
	}

}


输出示例:


|--Notepad++
|  |--change.log
|  |--config.model.xml
|  |--contextMenu.xml
|  |--functionList.xml
|  |--langs.model.xml
|  |--license.txt
|  |--localization
|  |  |--chineseSimplified.xml
|  |  |--english.xml
|  |--notepad++.exe
|  |--NppShell_05.dll
|  |--plugins
|  |  |--APIs
|  |  |  |--actionscript.xml
|  |  |  |--c.xml
|  |  |  |--cmake.xml
|  |  |  |--cpp.xml

|  |  |  |--cs.xml


2,遍历删除目录


File.delete()用于删除“某个文件或者空目录”!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除

package yx.file;

import java.io.File;


//File.delete()用于删除“某个文件或者空目录”!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除
public class DeleteAllFile {

	public static void main(String[] args) {
		//test();
		File file=new File("D:\\我不是空文件夹");
		deleteDir(file);
	}

	private static void deleteDir(File dir) {
		if(dir.exists()&&dir.isDirectory()){
			File[] files=dir.listFiles();
			for (File file : files) {
				if(file.isDirectory()){
					deleteDir(file);
				}else{
					if(file.delete()){
						System.out.println("已删除文件===>"+file.getName());
					}
				}
			}
			if(dir.delete()){
				System.out.println("已删除目录===>"+dir.getName());
			}
		}
	}

	private static void test() {
		File file1=new File("D:\\我是空文件夹");
		File file2=new File("D:\\我不是空文件夹");
		if(file1.exists()&&file1.isDirectory()){
			file1.delete();
		}
		
		if(file2.exists()&&file2.isDirectory()){
			file2.delete();//如果文件夹不为空,通过此方法我们不能删除该目录
		}
	}

}

3,指定文件清单列表

package yx.file;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/*
 * 
 * 获取指定目录下,指定扩展名的文件(包含子目录中的)
 * 这些文件的绝对路径写入到一个文本文件中。
 * 
 * 简单说,就是建立一个指定扩展名的文件的列表。 
 * 
 * 思路:
 * 1,必须进行深度遍历。
 * 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。
 * 3,对容器中的内容进行遍历并将绝对路径写入到文件中。 
 * 
 *
 */
//本实例获得E:\\workspace里面的所有.java文件,把他们的路径保存到E:\\temp\\temp.txt文件夹下面
public class GetSpecifiedFile {

	public static void main(String[] args) {
		File dir=new File("E:\\workspace\\");
		File outFile=new File("E:\\temp\\temp.txt");
		FilenameFilter filter=new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				return name.endsWith(".java");
			}
		};
		getSpecifiedFile(dir,filter,outFile);
	}

	//主功能函数
	private static void getSpecifiedFile(File dir, FilenameFilter filter,
			File outFile) {
		List<File> list=new ArrayList<File>();
		getFileList(dir,filter,list);
		write2File(list,outFile);
	}

	//遍历获得指定文件保存到list中
	private static void getFileList(File dir, FilenameFilter filter,List<File> list) {
		File[] all=dir.listFiles();
		for(int i=0;i<all.length;i++){
			if(all[i].isDirectory()){
				getFileList(all[i],filter,list);//递归操作
			}else{
				if(filter.accept(dir, all[i].getName())){//过滤文件名
					list.add(all[i]);
				}
			}
		}
	}
	
	//把取到的文件路径保存到知道文件夹
		private static void write2File(List<File> list, File outFile) {
	        File dir=outFile.getParentFile();
	        if(!dir.exists()){
	        	dir.mkdir();//如果目录不存在的话,需要新建一个目录。因为FileWriter只会帮用户建文件,不会帮用户将目录。如果没有目录将会报错
	        }
			BufferedWriter rw=null;
			try {
				rw=new BufferedWriter(new FileWriter(outFile));
				for (File file : list) {
					rw.write(file.getAbsolutePath());
					rw.newLine();
					rw.flush();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}finally{
				if(rw!=null){
					try {
						rw.close();
						rw=null;
					} catch (IOException e) {
						e.printStackTrace();
					}
					
				}
			}
			
		}

}


4,文件的切割和合并。(类似我们下载的文件 是1.part 2.part的形式)

实用IO流操作以后继续更新。。。

你可能感兴趣的:(java,删除,遍历,文件夹,指定文件清单)