【问题标题】:Directory is valid in Intellij but NOT in CMD and .jar目录在 Intellij 中有效,但在 CMD 和 .jar 中无效
【发布时间】:2023-03-12 05:34:01
【问题描述】:

这部分代码有问题。从文件夹中,我正在加载所有图像,然后将其作为对象的一部分保存到这些对象的列表中。

当我在 Intellij 中运行它时,一切正常。我打印 isDirectory() 只是因为这个问题。在 intellij 中它返回 true。

但是当我尝试通过 jar 在 cmd 中运行时,就会出现问题。方法 isDirectory() 返回 false 并且 listFiles() 抛出 NullPointerException。

我也尝试手动将整个路径保存在字符串目录中,但没有任何改变。在 intellij 中,它运行完美,并且在 CMD 中带有 jar 的问题。问题确实在这。在我开始使用这些功能之前,Jar 工作得很好。感谢您的任何想法。

 private void loadAllExercises(){
        public String directory = System.getProperty("user.dir") + "\\pictures\\";
        File directory = new File(directory);

        System.out.println(directory.isDirectory());

        for (File file : directory.listFiles()) {
            loadExercise(file);
            }
        }

    private void loadExercise(File file){
        if(file.getName().toLowerCase().endsWith(".jpg")) {
            Exercise exercise = new Exercise(file.getName());
            this.allExercises.add(exercise);
        }
    }

【问题讨论】:

    标签: java cmd jar path


    【解决方案1】:

    System.getProperty("user.dir") 返回应用程序启动时的当前目录,这可能不是您想要的。如果您想指向您的主目录,因为那是您的 pictures 目录所在的位置,请尝试使用 System.getProperty("user.home")

    【讨论】:

    • 谢谢你,我现在明白了,什么问题。问题在于 jar 在目标中。 “user.home”对我不利,因为我的图片是项目文件夹的一部分。我试过这个。我保留了我的代码,但在 getProperty 之后我还使用了 replace("target","")。之后,它也适用于 jar。但我还有另一个问题。我从 jar 创建了 exe,并再次从不同的位置运行。现在,对我来说最好的方法是找到如何在计算机中某处找到我的项目文件夹位置的方法。我你会有任何想法,它也会有所帮助。但比你的建议。
    • 如果您的意思是您的 jar/exe 中内置了图片作为静态资源,那么您可以使用getResourceAsStream() 来读取它们。如果您的意思是图片在其他地方,您可以使用命令行选项让用户在运行时指定图片路径。另一种选择是使用路径设置环境变量并让您的应用程序读取该值。或者,您将路径放在应用程序启动时可以读取的配置文件中。祝你好运!
    猜你喜欢
    • 2018-10-18
    • 2012-02-13
    • 2020-06-15
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2020-03-24
    • 1970-01-01
    相关资源
    最近更新 更多