我在尝试打印可用目录列表时遇到了一些问题。 这是我的代码和评论:
File f = new File(System.getProperty("user.home"));
System.out.println(f.list().toString()); //the output here is absolutely incorrect
这是输出
[Ljava.lang.String;@1540e19d
答案 0 :(得分:4)
您的输出[Ljava.lang.String; @ 1540e19d,是任何String数组的典型toString()输出。 [表示阵列。然后你会看到String的类名,然后是数组的hashcode。
你得到一个String数组。在for循环中迭代该数组
for (String fileName : f.list()) {
System.out.println(fileName);
}
或用
打印出来System.out.println(java.util.Arrays.toString(f.list()));
关键是使用File API因为它会告诉你File#list()
将返回什么,这里是一个String数组。
答案 1 :(得分:1)
要查找目录,您需要过滤列表。 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,这将返回File的原始数组,您可以将其更改为带有Arrays.asList的List
List<File> directories = Arrays.asList(home.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}));
关于&#34;错误&#34;的问题output [Ljava.lang.String; @ 1540e19d,这对于打印原始数组是正常的,不像Collection类型通常有一个很好的toString()实现。您可以使用实用方法java.util.Arrays.toString来实现&#34;漂亮的打印&#34;每个元素。
如果您需要递归列表,我应考虑使用较新的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());
答案 2 :(得分:0)
这个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:\\" );
}
答案 3 :(得分:0)
这样做
File f = new File(System.getProperty("user.home"));
String tok[]=f.list();
for(String s:tok){
System.out.println(s);
}
或者,您可以使用java.util.Arrays
将String array
返回的f.list()
转换为字符串:
Arrays.toString(f.list());