【问题标题】:Read a file from inside the .jar folder从 .jar 文件夹中读取文件
【发布时间】:2011-10-11 22:44:09
【问题描述】:

我需要通过这种方式读取jar文件夹内的文件:

 DataSource coverdata = new FileDataSource(new File("here is the path"));

我如何获得确切的路径?我正在使用一个库,所以我可以访问文件的唯一方法是new File(),没有输入流。

【问题讨论】:

  • 嗯,好像是这个的复制品:*.com/questions/6639/…
  • @Arthur Shniv "DataSource" 你能帮我解释一下吗?那是javax.activation.DataSourcejavax.sql.DataSource,还是别的什么? “我正在使用一个库,所以我可以访问文件的唯一方法是 new File(),没有输入流。” 听起来你需要让他们修复他们的 API。要么那个,要么使用不同的。

标签: java file jar inputstream


【解决方案1】:

如何使用@home 已经讨论过的 InputStream (getResourceAsStream() ) 方法创建一个新的临时文件,然后将其作为普通文件读取?

【讨论】:

    【解决方案2】:

    你走错路了。文件只是直接写入文件系统的东西。从 java API 的角度来看,jar 中的文件不是文件。

    要读取此文件,您必须使用 JarInputStream 或 ZipInputStream 解析 JAR,获取有趣的条目并从输入流中读取。这并不难,但您必须编写几行代码。

    其他方法是使用来自 jakarta.org 的 VFS 包。它为您提供不同文件系统、ZIP、TAR 和其他容器格式的元素的统一视图。

    【讨论】:

      【解决方案3】:

      致电ClassLoader.getResourceAsStream()::InputStreamClassLoader.getResource()::URL

      见:

      http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)

      http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ClassLoader.html#getResourceAsStream(java.lang.String)

      包含所请求文件的 JAR 文件必须在类路径中。

      【讨论】: