忽然发现,游戏并没有那么好玩,真正好玩的是什么? 人心。 而如何避免别人玩弄你的心,那就是让别人不敢玩弄你的心,代价是付不起的。 人神之恋,开始了。
上一章简单介绍了两个字符串的最大公共子串(七),如果没有看过,请观看上一章
一 查询目录下所有的文件
有时候,需要根据一个目录来查询该目录下所有的文件信息。 主要是根据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表示的是级别
结果与上面的一致。
谢谢!!!