[英]Array of Path using nio
我只是在學習主題 nio 並完成了以下任務:使用 nio 遞歸搜索文件名。 該方法應該返回一個找到的路徑列表。 當我在輸出中運行下面的代碼時,我只看到[] 。 有人可以解釋並糾正我嗎?
public class Task01 {
public static void main(String[] args) throws IOException {
Path dir = Paths.get("C:\\Users\\......");
System.out.println(findFile(dir, "Task01.java"));
}
public static ArrayList<Path> findFile(Path path, String filename) throws IOException {
Path dir = Paths.get("C:\\....");
ArrayList<Path> list1 = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(path, filename)) {
for (Path entry : stream) {
if (path.toFile().isDirectory()) {
findFile(path, filename);
} else list1.add(entry.toAbsolutePath());
}
}
return list1;
}
}
首先,在進行遞歸時,您要使用entry
而不是path
,否則您不會沿着目錄樹向下走。
還使用Files.newDirectoryStream(path)
,而不是Files.newDirectoryStream(path, fileNamePattern)
第二方法創建在其文件名匹配fileNamePattern路徑的流,在你的情況下,將空的[]
如果你的Test.java
不位於path
public static void main(String[] args) throws IOException {
Path dir = Paths.get("E:\\dev\\...");
System.out.println(findFile(dir, "TestA.java"));
}
public static ArrayList<Path> findFile(Path path, String filename) throws IOException {
ArrayList<Path> list1 = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
for (Path entry : stream) {
if (Files.isDirectory(entry)) {
list1.addAll(findFile(entry, filename));
} else if(entry.getFileName().endsWith(filename)){
list1.add(entry.toAbsolutePath());
}
}
}
return list1;
}
此代碼可能對您有用:
public static ArrayList<Path> findFile(Path path, String filename) throws IOException {
ArrayList<Path> list1 = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(path,filename)) {
for (Path entry : stream) {
System.out.println(entry+ "-"+entry.getFileName());
if (Files.isDirectory(entry)) {
list1.addAll(findFile(entry, filename));
}
else if (entry.getFileName().toString().equals(filename))
list1.add(entry.toAbsolutePath());
}
}
return list1;
}
list1.addAll(findFile(entry, filename));
entry
,而不是path
否則您不會遞歸處理目錄結構。 (參見Files.isDirectory(entry)
而不是path.toFile().isDirectory()
更新:改進了 java.nio API 的使用(感謝 @Andreas)。 nio
我對nio
api 不太熟悉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.