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

Java 从指定的相对路径迭代目录中的所有文件,java,relative-path,Java,Relative Path,我希望使用这种“相对”路径,因为我希望能够将此目录中的所有文件都包含在github项目中,其他人可以下载并运行该项目 所以我只想在结构中跳一次。/,然后进入其中一个目录,word\u列出\u 1并读取所有文件 第六 但这段代码一直在崩溃。为什么呢 public static void main(String[] args) { ArrayList<File> arrayList = new ArrayList<File>(); final String

我希望使用这种“相对”路径,因为我希望能够将此目录中的所有文件都包含在github项目中,其他人可以下载并运行该项目

所以我只想在结构中跳一次
。/
,然后进入其中一个目录,
word\u列出\u 1
并读取所有文件

第六

但这段代码一直在崩溃。为什么呢

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);
        }
    }
}
所以它不喜欢第49行,这是:

for (File file : fList)

这是我从你的要求中了解到的

  • 您位于当前执行目录中,然后希望遍历 返回一个目录并按名称进入其他文件夹 “word_列表_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";
希望这有帮助

祝你好运

您可能需要文件规范路径来相应地解析父级,并避免任何可能需要解析为
null
的路径,因此出现
NullPointerException

一个简单的实现可以将a目录从实际路径解析到当前目录,然后显示其加载树层次结构,如下所示:

公共类主
{
公共静态void main(字符串[]args)抛出URISyntaxException、IOException
{
File currentDir=新文件(“.”;//读取当前文件位置
文件targetDir=null;
if(currentDir.isDirectory()){
File parentDir=currentDir.getCanonicalFile().getParentFile();//解析实际路径以外的父位置
targetDir=new File(parentDir,“word_lists_1”);//使用正确的父目录构造目标目录文件
}
如果(targetDir!=null&&targetDir.exists())
{
listDirectoryAndFiles(targetDir.toPath());
}
}
私有静态void listDirectoryAndFiles(路径路径)引发IOException
{
DirectoryStream dirStream=Files.newDirectoryStream(路径);
for(路径p:dirStream)
{
System.out.println(p.getFileName());
if(p.toFile().isDirectory())
{
listDirectoryAndFiles(p);
}
}
}
}
您可能只需要调整
listDirectoryAndFiles(java.nio.file.Path)
方法来满足您的需要


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

检查
getParent
方法是否适合您。。将其应用于目录名?将其应用于该目录名的
文件
对象。我认为它不起作用,至少我是如何尝试的。当然,你可以比“持续崩溃”更具体一些?是否引发异常?如果是这样的话,它的stacktrace是什么?我刚刚试过这两种,但都不起作用。我在用intellij。我在一个名为
src
的目录中,上面是项目目录,它位于
word\u列表\u 1
。我希望它是完全动态的tho,这样随机的人可以从github下载它并运行它,你知道我的意思吗?这是我收到的错误消息:---------------------------------------------------------------------------------------线程“main”java.lang.NullPointerException中的异常位于main.listf(main.java:52)sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:497)上在com.intellij.rt.execution.application.AppMain.main(AppMain.Yaaa)上,我现在完全得到了u,将不得不考虑类似的问题我得到了错误
错误:(93,13)java:找不到符号符号:方法listDirectoryFiles(java.nio.file.Path)位置:class Main
抱歉,第一个方法调用包含错误的方法名称…我已修复它,您可以使用当前示例重试。不是这样。当我删除行
File parentDir=currentDir.getCanonicalFile().getParentFile();//将父位置解析为实际路径时,它起作用了
String str=Paths.get(".").toAbsolutePath().normalize().toString();
String filePath = str+"/../word_lists_1";