【问题标题】:How to package resource files within project如何在项目中打包资源文件
【发布时间】:2012-10-27 02:43:54
【问题描述】:

我不确定我这样做是否正确。 我想在我的 Java 项目中有一个包含一堆文本文件的文件夹或包。在代码中,我想列出文件夹中的所有文件,并能够读取它们。我希望这些资源文件成为我项目目录结构的一部分(以便它们可以使用我的源代码进行版本控制)。

我已经看到 ClassLoader.*resource 方法,但无法识别我的源目录中的文件夹并列出它的内容...

顺便说一句,我正在使用 Eclipse。 有人知道如何实现这个目标吗?

谢谢

============================================

更新:

感谢您的回复!我发现通过添加源文件夹,我只能通过名称访问里面的文件。但是,这不符合我的需要,因为文件夹的内容会发生变化,并且我希望能够动态读取所有内容,而不必在每次内容更改时都更改读取逻辑。我尝试为源文件夹中的常规文件夹创建一个文件并迭代它的内容。只要在 Eclipse 中运行,它就可以工作,但根据 Edwin 的评论,当我导出到 JAR 时这将不起作用,所以我回到了第一格。

我认为必须有一种方法可以在我的项目中包含我可以以编程方式访问的资源文件(Android 会这样做并且它基于 java 对吗?)。那么有没有另一种方法来创建一个包含一堆文件的“资源”包,我可以在运行时访问这些文件,而无需更新代码来查找每个文件?我真的不想将此文件夹与我的源文件分开并将其维护在不同的位置,因为这会使部署复杂化...... 有人有什么想法吗?

谢谢

======================================

解决方案:

我刚刚意识到 Android 在编译时会清点它的资源文件,以便在运行时使它们可用。所以这可能是要走的路:我将在我的 Ant 脚本中添加一个步骤,该脚本写入一个包含我文件夹中文件列表的文件(始终命名相同,以便我可以访问它)。这样我就可以知道所有可用资源文件的名称。感谢埃德温的帮助:)

【问题讨论】:

  • 当你的项目被部署时,你是否设想这些文件被打包到 JAR 中还是仍然在一个单独的目录中?
  • 我没关系,只要我可以在开发过程中添加文件并在运行时读取它们
  • @noobler 我担心一旦您将所有内容打包到 jar 或 war 文件中,您使用 URL 创建 File 对象的解决方案将无法使用。这仅在您可以直接访问硬盘上的文件时有效,但当访问需要压缩/解压缩或任何其他协议时,它将停止工作。

标签: java resources package


【解决方案1】:

确保您的资源文件夹是 Eclipse Build Path 对话框中的源文件夹。然后,您将能够使用问题中提到的 ClassLoader 方法加载它们。

如果您使用此技术,源文件夹中的每个子文件夹都被视为一个包。因此,请务必在加载资源时考虑到这一点。

这种技术基本上可以确保这个文件夹中的所有Java文件都被编译并放置在分发文件夹下。并且任何其他文件都简单地从该文件夹复制到分发文件夹(即 bin 或 classes 文件夹)。

稍后,当您将项目打包到 jar 或 war 中时,您必须确保这些文件包含在打包文件中。

【讨论】:

  • 埃德温在现场。将文件夹添加为源文件夹本质上是将其添加到根目录的类路径中。
  • @noobler 这是一个奇怪的要求。最终,您的所有文件都将打包在一个 jar 或 war 中,因此您不可能事先知道它们的名称。我认为使用 getResource 方法只能按名称获取资源,而不能按文件夹获取资源。对于后一个请求,您可能需要使用 JarURLConnection,但这是完全不同的野兽。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2012-01-26
  • 2013-11-13
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
相关资源
最近更新 更多