我試圖打印可用目錄列表時出現了一些問題。 這裏是我的代碼註釋:打印文件列表
File f = new File(System.getProperty("user.home"));
System.out.println(f.list().toString()); //the output here is absolutely incorrect
這是輸出
[Ljava.lang.String;@1540e19d
我試圖打印可用目錄列表時出現了一些問題。 這裏是我的代碼註釋:打印文件列表
File f = new File(System.getProperty("user.home"));
System.out.println(f.list().toString()); //the output here is absolutely incorrect
這是輸出
[Ljava.lang.String;@1540e19d
要查找的目錄,你需要過濾列表。 listFiles()是一個更好的方法,因爲它返回File對象列表而不是String,這最終會更強大,並允許測試如果「file」是一個我相信你正在嘗試執行的目錄的測試。
File home = new File(System.getProperty("user.home"));
for (File file : home.listFiles()) {
if (file.isDirectory()) {
System.out.println(file);
}
}
或者您可以使用listFiles(一的FileFilter),這將返回文件的基本數組,你可以換到一個列表與Arrays.asList
List<File> directories = Arrays.asList(home.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}));
關於的問題「不正確的」輸出[Ljava.lang.String; @ 1540e19d,這對於打印出原始數組是非常正常的,與通常具有很好的toString()實現的集合類型不同。您可以使用實用程序方法java.util.Arrays.toString「漂亮地打印」每個元素。
如果您需要遞歸列表,我會考慮使用更新的java.nio.Files.walk()功能,而不是編寫自己的遞歸方法。
List<Path> paths = Files.walk(home.toPath()).filter(new Predicate<Path>() {
@Override
public boolean test(Path path) {
return path.toFile().isDirectory();
}
}).collect(Collectors.toList());
或者更簡潔地與Java 8關閉。
List<Path> paths = Files.walk(home.toPath()).filter((path) -> path.toFile().isDirectory()).collect(Collectors.toList());
這一堆的最佳答案。 1+ – 2014-09-29 11:08:26
這個LL打印文件數以及列表在當前目錄下的文件:
File f = new File(System.getProperty("user.home"));
System.out.println(f.list().length);
for (String fileName : f.list()) {
System.out.println(fileName);
}
如果您想用subdirectory
列出文件,然後輸入:
public void listFiles(String path) {
File root = new File(path);
File[] list = root.listFiles();
for (File f : list) {
if (f.isDirectory()) { // check that if current instance is file or directory
listFiles(f.getAbsolutePath());
System.out.println("Dir:" + f.getAbsoluteFile());
}
else {
System.out.println("File:" + f.getAbsoluteFile());
}
}
}
public static void main(String[] args) {
Test t = new Test();
fw.listFiles("c:\\");
}
您的輸出[Ljava.lang.String; @ 1540e19d是任何String數組的典型toString()輸出。 [意味着數組。然後你會看到String的類名,然後是數組的哈希碼。您正在獲取String數組。通過陣列中的迭代for循環
for (String fileName : f.list()) {
System.out.println(fileName);
}
或
System.out.println(java.util.Arrays.toString(f.list()));
的關鍵是使用File API,因爲它會告訴你什麼是File#list()
將返回,這裏的打印出來字符串數組。
謝謝=)這是有效的。 – 2014-09-29 10:10:03
@MaximGotovchits:關鍵是使用API,因爲它會告訴你什麼'File#list()'將返回,這裏是一個String數組。 – 2014-09-29 10:10:46
好的,如你所願=) – 2014-09-29 14:44:01
做它或者您可以使用java.util.Arrays
通過f.list()
返回String array
轉換爲字符串作爲這樣
File f = new File(System.getProperty("user.home"));
String tok[]=f.list();
for(String s:tok){
System.out.println(s);
}
:
Arrays.toString(f.list());
請爲我們定義「絕對不正確」。 – 2014-09-29 10:06:14
好的。它是[Ljava.lang.String; @ 1540e19d – 2014-09-29 10:06:52
您正在獲取一個String數組。迭代該數組,或者使用'System.out.println(java.util.Arrays.toString(f.list()));' – 2014-09-29 10:07:45