public static void main(String[] args) {
long start = System.currentTimeMillis();
LinkedList queue = new LinkedList<>();
File root = new File("c:\\java\\");
File[] files = root.listFiles();
for (File f : files) {
if (f.isDirectory()) queue.add(f);
else System.out.println(f.getAbsolutePath());
}
File current;
while (!queue.isEmpty()) {
current = queue.removeFirst();
File[] children = current.listFiles();
if (children == null) continue;
for (File f : children) {
if (f.isDirectory()) queue.add(f);
else System.out.println(f.getAbsolutePath());
}
}
System.out.println("耗時: " + (System.currentTimeMillis() - start) + "ms");
}
private static List fileList = new ArrayList<>();
public static void main(String[] args) {
long start = System.currentTimeMillis();
refreshFileList("c:\\java");
System.out.println("耗時: " + (System.currentTimeMillis() - start) + "ms");
}
public static void refreshFileList(String path) {
File dir = new File(path);
File[] files = dir.listFiles();
if (files == null) return;
for (File f : files) {
if (f.isDirectory()) {
refreshFileList(f.getAbsolutePath());
} else {
System.out.println("---" + f.getAbsolutePath().toLowerCase());
fileList.add(f);
}
}
}
遞歸方案(B)性能相對更好。原因:
LinkedList,頻繁 add/removeFirst 產生臨時對象,GC 壓力大。StackOverflowError。Files.walkFileTree() (NIO.2) 獲得更豐富的訪問控制與性能。