一 查询目录下所有的文件
有时候,需要根据一个目录来查询该目录下所有的文件信息。 主要是根据File 类来进行相应的处理。 这里讲其中的一种方式。
public static void showFileList(File file){ if(!file.exists()){ System.out.println("这是一个错误的路径"); } if(file.isDirectory()){ //如果是目录的话,递归调用这个查询方法。 File []files=file.listFiles(); for (File file2 : files) { showFileList(file2); } }else{ if(file.isFile()){ //如果是文件的话 //System.out.println(file.getAbsolutePath()); //System.out.println(file.getPath()+File.separator+file.getName()); System.out.println(file); //这三种方式均可以。 } } }
测试为:
File root=new File("D:"+File.separator+"a"); showFileList(root); //0表示的是级别
查询结果为:
二. 集合传入传出
上面的这个方法,输出时竟然是System.out.println() 方式进行输出的,可以做简单的测试使用,但无法在代码中进行重用的,需要将所有的文件信息都存储起来。 可以存储在一个List 集合里面, 只存储文件名,所以用 String 类型即可。与第一种方式是一样的,只是将输出语句转换成add() 方法添加到集合里面。
public static void showFileList(File file,List<String> fileNameList){ if(!file.exists()){ System.out.println("这是一个错误的路径"); } if(file.isDirectory()){ File []files=file.listFiles(); for (File file2 : files) { showFileList(file2); } }else{ //System.out.println(file.getAbsolutePath()); //System.out.println(file.getPath()+File.separator+file.getName()); if(file.isFile()){ fileNameList.add(file.getAbsolutePath()); } } }
集合是从外面传递进来的,当然也可以在内部进行初始化,然后返回集合。
调用形式为:
File root=new File("D:"+File.separator+"a"); List<String> fileNameList=new ArrayList<String>(); showFileList(root,fileNameList); for(String fileName:fileNameList){ System.out.println(fileName); }
输出的结果,与上面一样。
三. 树型展示文件列表
上面只是展示最后一层的文件名,各个文件之间不容易一眼看出级别,如果能够树型 tree 展示就很好了。
如这样形式的简单展示。 其实,这个主要的思想就是在文件的名称前端添加空格,后面是正常的文件名,主要是对空格进行相应的处理。
public static void showFileList(File dir,int level){ //级别进行++的处理。 System.out.println(getLevelFormatter(level)+dir.getName()); // 级别是局部参数 level++; if(dir.isDirectory()){ //是目录的话 //列出目录下的所有文件,也可以是目录。 File[] file=dir.listFiles(); for (File file2 : file) { showFileList(file2, level); } } }
//对文件名称进行处理的方式为
public static String getLevelFormatter(int level){ StringBuilder sb=new StringBuilder("-|"); while(level>0){ // 四个空格,可以多个使用。 sb.insert(0," "); level--; } return sb.toString(); }
刚开始时,传入的级别是0. 测试方法为:
File root=new File("D:"+File.separator+"a"); showFileList(root,0); //0表示的是级别
结果与上面的一致。
谢谢!!!