参数“directory”不是参数的目录,而参数是目录

问题描述 投票:0回答:2

我收到一个奇怪的错误,我提供给方法的参数抱怨它不是一个目录,但它实际上是一个包含文件的目录...我不明白出了什么问题...

顶层:

public static File mainSchemaFile = new File("src/test/resources/1040.xsd");
public static File contentDirectory = new File("src/test/resources/input");
public static File outputDirectory = new File("src/test/resources/output");


DecisionTableBuilder builder =constructor.newInstance(log, contentDirectory, outputDirectory);

// Here is where the error occurs
builder.compile(mainSchemaFile);

我正在使用的课程:

public class DecisionTableBuilder {

   public void compiler(File schemaFile) {
      ...
      // It's complaining about contentDirectory, it goes to FileUtils class for this
      Collection<File> flowchartFiles = FileUtils.listFiles(contentDirectory, mapExtension, true);
      ...
   }
}

这是 apache FileUtils 类:

public class FileUtils {

    private static void validateListFilesParameters(File directory, IOFileFilter fileFilter) {
        if (!directory.isDirectory()) {
            throw new IllegalArgumentException("Parameter 'directory' is not a directory");
        }
        if (fileFilter == null) {
            throw new NullPointerException("Parameter 'fileFilter' is null");
        }
    }

}

输出:参数“directory”不是目录

这是我得到的错误输出...

任何人都知道这里发生了什么,我非常困惑......任何帮助将不胜感激。

编辑:

在我的顶层我添加了以下行:

if(contentDirectory.isDirectory()) {
    System.out.println("Content Directory: "+contentDirectory);
}

Output: src/test/resources/input
java io fileutils
2个回答
0
投票

您指向的是文件而不是

mainSchemaFile
变量中的目录。减少包含
1040.xsd
的文件夹的路径 - 它应该可以解决问题。


-1
投票

如果无法到达路径,则会抛出错误

您显示的文件路径并不能告诉您尝试运行代码的位置。如果您在工作区中,但想在服务器上运行它,并且路径应该位于服务器上,请参阅如下:

在调试过程中,我在自己项目的控制台输出的错误日志中看到代码尝试从我的工作区获取数据。在编码时,我以为它会到达生产服务器上的文件,但事实并非如此。

Exception in thread "my_project" java.lang.IllegalArgumentException: Parameter 'directory' is not a directory
        at org.apache.commons.io.FileUtils.validateListFilesParameters(FileUtils.java:545)
        at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:521)
        at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:691)

将所需的文件复制到我的工作区以及代码中的正确路径后,错误就消失了,因为它找到了目录。

在我的程序中,我的工作目录是我运行代码的存储库。我必须拉取服务器上的存储库才能使用服务器上的工作目录运行它,以便它可以找到输入文件的生产目录。

© www.soinside.com 2019 - 2024. All rights reserved.