列出1000多个目录和子目录中文件名的最快方法是什么?
编辑; 我使用的当前代码是:
import java.io.File;
public class DirectoryReader {
static int spc_count=-1;
static void Process(File aFile) {
spc_count++;
String spcs = "";
for (int i = 0; i < spc_count; i++)
spcs += " ";
if(aFile.isFile())
System.out.println(spcs + "[FILE] " + aFile.getName());
else if (aFile.isDirectory()) {
System.out.println(spcs + "[DIR] " + aFile.getName());
File[] listOfFiles = aFile.listFiles();
if(listOfFiles!=null) {
for (int i = 0; i < listOfFiles.length; i++)
Process(listOfFiles[i]);
} else {
System.out.println(spcs + " [ACCESS DENIED]");
}
}
spc_count--;
}
public static void main(String[] args) {
String nam = "D:/";
File aFile = new File(nam);
Process(aFile);
}
}
Run Code Online (Sandbox Code Playgroud)
Aks*_*ert 33
由于这个答案显示在google之上,我正在添加一个用于列出所有文件和目录的java 7 nio解决方案,它在我的系统上花费的时间减少了大约80%.
try {
Path startPath = Paths.get("c:/");
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) {
System.out.println("Dir: " + dir.toString());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("File: " + file.toString());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException e) {
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
唯一的改进是摆脱static spc_count并将spcs字符串作为参数传递给Process.
public static void main(String[] args) {
String nam = "D:/";
File aFile = new File(nam);
Process("", aFile);
}
Run Code Online (Sandbox Code Playgroud)
在做递归调用时,做
static void Process( String spcs, File aFile) {
...
Process(spcs + " ", listOfFiles[i]);
...
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以从多个线程调用此方法.