File文件操作类(综合案例:目录列表)
一、File类综合操作:列出子目录内容
虽然File类本身提供有listFiles()方法,但是这个方法本身只能够列出本目录中第一级信息,如果要求列出目录中的所有级的信息,则就必须自己来实现处理,这种操作就必须通过递归的模式来完成。
范例:实现该操作
package cn.mldn.demo;
import java.io.File;
public class TestDemo {
public static void main(String[ ] args) throws Exception {
File file = new File("d:" + File.separator); // 要操作的文件
listDir(file) ; // 必须开始执行
System.out.println(x); ;
}
/**
* 列出指定目录中的全部子目录信息
* @param file
*/
public static void listDir(File file) {
If (file.isDirectory()){ // 现在给定的File属于一个目录
File result [ ] = file.listFiles() ; // 继续列出该子目录中的内容
for (int x = 0 ; x < result.length ; x++) {
ListDir(result[x]) ; // 继续列出
}
}
System. out. println(file); // 直接输出
}
}
package cn.mldn.demo;
import java.io.File;
public class TestDemo {
public static void main(String[ ] args) throws Exception {
File file = new File("d:" + File.separator); // 要操作的文件
listDir(file) ;
// 必须开始执行
System.out.println(x); ;
}
/**
* 列出指定目录中的全部子目录信息
* @param file
*/
public static void listDir(File file) {
If (file.isDirectory()){ // 现在给定的File属于一个目录
File result [ ] = file.listFiles() ; // 继续列出该子目录中的内容
If (result != null) {
for (int x = 0 ; x < result.length ; x++) {
ListDir(result[x]) ; // 继续列出
}
}
System. out. println(file); // 直接输出
}
}
此时这个过程是可以正常运输的,没有任何问题
二、线程阻塞问题:
现在的所有代码都是在main线程下完成的,如果列出的操作不完成,那么对于main后续的执行将无法完成,也就是说这种耗时的操作让主线程暂时出现了阻塞,而导致后续代码无法正常执行完毕。
所以此时如果不想让这种阻塞产生,那么最好再产生一个新的线程进行处理。
package cn.mldn.demo;
import java.io.File;
public class TestDemo {
public static void main(String[ ] args) throws Exception {
new Thread(()->{
File file = new File(“d:” + File.separator);
// 要操作的文件
listDir(file) ; // 必须开始执行
}),”列出线程”).start();
System.out.println(“开始进行文件的信息列出………”);
listDir(file) ; // 必须开始执行
System.out.println(x); ;
}
/**
* 列出指定目录中的全部子目录信息
* @param file
*/
public static void listDir(File file) {
If (file.isDirectory()){ // 现在给定的File属于一个目录
File result [ ] = file.listFiles() ;
// 继续列出该子目录中的内容
If (result != null) {
for (int x = 0 ; x < result.length ; x++) {
ListDir(result[x]) ; // 继续列出
}
}
System. out. println(file); // 直接输出
}
}
对于以上的操作如果将输出变为了删除就可以成为一个恶意的程序了。如果你真要在你的项目里面追加这类代码,最笨的人是直接写在程序里面,稍微聪明点的,建议你把这些代码单独放在一个开发工具包里面。
三、总结:
以下的几个方法一定要记住:
构造方法一:
public File(String pathname)
删除文件:
public boolean delete();
判断文件是否存在:
public boolean exists
取得父路径:
public File getParentFile();
创建目录:
public boolean mkdirs();