从指定的相对路径迭代目录中的所有文件

时间:2015-05-16 12:23:40

标签: java relative-path

我想使用这种"亲戚" path,因为我希望能够将此目录中的所有文件作为github项目的一部分包含在其他人可以下载并运行的项目中。

所以我想在结构../中跳一次,然后进入其中一个目录word_lists_1并读出所有文件。

6

此代码仍然崩溃。那是为什么?

public static void main(String[] args)
{
    ArrayList<File> arrayList = new ArrayList<File>();

    final String directoryName = "../word_lists_1";
    listf( directoryName, arrayList );

    for(File elem : arrayList)
    {
        System.out.println(elem+"  ");
    }

}

public static void listf(String directoryName, ArrayList<File> files)
{
    File directory = new File(directoryName);

    // get all the files from a directory
    File[] fList = directory.listFiles();
    for (File file : fList)
    {
        if (file.isFile())
        {
            files.add(file);
        }
        else if (file.isDirectory())
        {
            listf(file.getAbsolutePath(), files);
        }
    }
}

这是错误消息:

Exception in thread "main" java.lang.NullPointerException
at Main.listf(Main.java:49)
at Main.main(Main.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

所以它不像行49那样:

for (File file : fList)

2 个答案:

答案 0 :(得分:3)

您可能需要文件规范路径来相应地解析父级,并避免任何可能需要解析的路径null,因此NullPointerExceptionpublic class Main { public static void main( String[] args ) throws URISyntaxException, IOException { File currentDir = new File( "." ); // Read current file location File targetDir = null; if (currentDir.isDirectory()) { File parentDir = currentDir.getCanonicalFile().getParentFile(); // Resolve parent location out fo the real path targetDir = new File( parentDir, "word_lists_1" ); // Construct the target directory file with the right parent directory } if ( targetDir != null && targetDir.exists() ) { listDirectoryAndFiles( targetDir.toPath() ); } } private static void listDirectoryAndFiles( Path path ) throws IOException { DirectoryStream<Path> dirStream = Files.newDirectoryStream( path ); for ( Path p : dirStream ) { System.out.println( p.getFileName() ); if ( p.toFile().isDirectory() ) { listDirectoryAndFiles( p ); } } } }

一个简单的实现,用于解析当前目录的实际路径中的目录,然后显示加载其树层次结构如下:

listDirectoryAndFiles(java.nio.file.Path)

您可能只需要调整from i in r方法即可满足您的需求。

请注意,上述实现使用Java 7中的新I / O功能。

答案 1 :(得分:1)

这是我从您的要求中理解的

  • 您处于当前执行目录中,然后您想要遍历 返回一个目录并按名称进入其他文件夹 “word_lists_1”

如果我理解你的问题,我会像

那样实现它
String str=System.getProperty("user.dir");
String filePath = str+"/../word_lists_1";

如果您在其他目录中,则可以执行

String str=Paths.get(".").toAbsolutePath().normalize().toString();
String filePath = str+"/../word_lists_1";

希望这有帮助!

祝你好运!