【问题标题】:FileNotFoundException although the file is in place and the path is correct [duplicate]FileNotFoundException 尽管文件已就位且路径正确[重复]
【发布时间】:2015-09-27 16:28:05
【问题描述】:

我正在努力解决一个我觉得很奇怪的问题。我已经在 StackOverflow 上查看了至少五个类似的主题,但他们都没有提供答案。但是对于问题本身:我想在应用程序启动时读入一个文件。当我在 IDE (IntelliJ Idea) 中运行应用程序时,一切正常。虽然当我用 Gradle Java 构建它时会抛出 FileNotFoundException:

java.io.FileNotFoundException: file:/home/user/IdeaProjects/time-keeper/build/libs/time-keeper-0.7-beta.jar!/data.csv (No such file or directory)

文件路径正确,文件存在,jar有适当的权限。 声明:

File dataFile = new File(ClassLoader.getSystemResource("data.csv").getFile());
Handle<TimeTask> dataHandle = new FileHandle(dataFile);

【问题讨论】:

  • 您是否将应用部署到应用服务器?

标签: java


【解决方案1】:

只要data.csv 本身是一个文件,一切正常。只要您从 IDE 中运行应用程序,这可能是正确的。在这种情况下,

ClassLoader.getSystemResource("data.csv").getFile()

返回文件系统上文件的路径。但是,一旦 gradle 生成一个包含文件 data.csv 的 JAR,上面的调用就会产生

/home/user/IdeaProjects/time-keeper/build/libs/time-keeper-0.7-beta.jar!/data.csv

虽然这在技术上是正确的路径(JAR 中的data.csv),但它不再是有效的文件系统路径。 java.io.File 实用程序无法处理存档中的任意 URL 或文件。 data.csv 根本不是 File,而是存档中的一个条目。

如果你想读取“文件”,你可以使用getSystemResourceAsStream打开一个资源(不管它是否是一个“真实”文件)作为InputStream

【讨论】:

  • 对。很好的答案。
  • 是的,感谢您的精彩回答!你拯救了我的一天 :-) 还在学习 ;-)
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 2015-08-30
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多