首页 > 解决方案 > 打包的 Jar 无法从映射的网络驱动器读取文件 (Windows)

问题描述

我有一个 Spring Boot 应用程序,它读取映射网络驱动器上文件夹中的文件,即 m:/PRODUCTION

问题是,当我执行 jar 文件时,我的调试输出显示文件夹中不存在任何文件,即使文件夹中已满是文件。

我在同一台机器上安装了 IntelliJ,如果我从它的源代码运行应用程序,它工作得非常好。

我将文件名读取到数组的方法是;

private File[] getFilesInPath(String path) {
        File folder = new File(path);
        File[] listOfFiles = folder.listFiles();

        if (listOfFiles != null) {
            Arrays.sort(listOfFiles, Comparator.comparingLong(File::lastModified));
        }

        return listOfFiles;
    }

然后,我从应用程序中的许多地方调用此函数,这是一个示例;

public void manuallyProcessAttritionData(List<Line> lines) {
        Handler handler = new AttritionHandler().setLines(lines).setService(this);

        String pathToProcess = dataFolder + attritionFolder;
        log.debug("Processing path: " + pathToProcess);
        File[] listOfFiles = getFilesInPath(pathToProcess);
        if (listOfFiles != null) {
            log.debug("Number of files to process: " + listOfFiles.length);
            for (File file : listOfFiles) {
                handler.processFile(file);
            }
        } else {
            log.debug("No files to process");
        }
    }

运行上面的输出是;

Processing ATTRITION data...
Processing path: m:/PRODUCTION
No files to process
...Finished processing ATTRITION data

我已经确认路径是正确的,从命令行运行以下命令可以正常工作并且结果中有文件;

cd m:\PRODUCTION
M:\PRODUCTION>

有谁知道为什么可以从 IntelliJ 中运行的应用程序中完美地读取该文件夹,但打包为 JAR 文件时却不能?

标签: javaspring-boot

解决方案


看起来您的开发帐户 Intellij 可以访问此驱动器,而启动此 spring-boot 的帐户无权访问它。

我建议使用完整路径而不是映射的网络路径。


推荐阅读