java - 打包的 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 文件时却不能?
解决方案
看起来您的开发帐户 Intellij 可以访问此驱动器,而启动此 spring-boot 的帐户无权访问它。
我建议使用完整路径而不是映射的网络路径。