一般在学习java,需要用到File类来提取文件和文件夹,按照很多教程来写,基本都能做到
package exam;
import java.io.File;
import java.util.ArrayList;
public class ExtractingFiles {
String path;
ExtractingFiles(String path){
this.path = path;
}
ArrayList<String> start() {
ArrayList<String> files = new ArrayList<String>();
File a = new File(this.path);
if(a.isDirectory()){
File[] S = a.listFiles();
for(int i =0;i<S.length;i++) {
System.out.println(S[i]);
File f = new File(S[i].getPath());
{
if (f.isDirectory()) {
ExtractingFiles as = new ExtractingFiles(f.getPath());
files.addAll(as.start());
} else {
files.add(f.getPath());
}
}
}else {
System.out.println("这个目录不存在:"+a);
}
return files;
}
}
但是,如果输入根目录,一般会报这样的错:
实际上,这是因为根目录下有隐藏文件,且这些文件被加了权限,一般无法访问。这就导致明明是确定的路径,却无法读取里面内容的情况。导致File变量是空。
所以,可以加一个判断隐藏文件的方法
package exam;
import java.io.File;
import java.util.ArrayList;
public class ExtractingFiles {
String path;
ExtractingFiles(String path){
this.path = path;
}
ArrayList<String> start() {
ArrayList<String> files = new ArrayList<String>();
File a = new File(this.path);
if(a.isDirectory()){
File[] S = a.listFiles();
for(int i =0;i<S.length;i++) {
System.out.println(S[i]);
File f = new File(S[i].getPath());
// File.isHidden()是判断文件是否为隐藏,因为根目录下有一些存放缓存的文件夹,且是隐藏状态,可以用这个来排出隐藏文件
if (f.isHidden()) {
} else {
if (f.isDirectory()) {
ExtractingFiles as = new ExtractingFiles(f.getPath());
files.addAll(as.start());
} else {
files.add(f.getPath());
}
}
}
}else {
System.out.println("这个目录不存在:"+a);
}
return files;
}
}
这样,就不会出问题
其实,不只是java,其他语言读取根目录都会有这个问题