【问题标题】:Creating Runnable Jar with external files included创建包含外部文件的可运行 Jar
【发布时间】:2013-08-08 02:25:42
【问题描述】:

我想在 java 中构建一个可运行的 jar。我需要在 jar 中包含一些文件,以便在执行 jar 时自动从 java 类中读取文件。因此,我在项目中创建了一个文件夹,并从项目中引用了这些文件。我按照一些教程创建了 jar 文件,但我无法将这些外部文件包含在我的 jar 文件中。请让我谈谈使用外部文件创建可运行的 jar。

我的文件结构是

Test
|
|
-------src
|        |
|        default package
|                      |
|                      |
|                      test1.java
|
 -------FileFOlder
|              |
|              | 
|              abc.txt

我正在 test1.java 类中访问 abc.txt。 我的代码是,

public class test1 {


public static void main(String[] args) throws IOException {


    char [] read = new char[20];
    String path = new File(".").getCanonicalPath();
    path = path+"\\Newfolder\\abc.txt";
    System.out.println(path);
    File nF = new File(path);
    FileReader fR = new FileReader(nF);
    fR.read(read);
    for(char c : read){
        System.out.print(c);
    }
    fR.close();
    System.out.println(" Hi..This is test program ");
}

}

当我使用 eclipse 导出选项创建可执行 jar 时,我无法在 jar 中看到 FileFolder 目录。请给我一些有关这方面的信息。

【问题讨论】:

  • 定义“无法在我的 jar 文件中包含这些外部文件”。为什么不呢?

标签: java file jar executable-jar


【解决方案1】:

你应该这样做:

把那个文件放回in你的jar文件。使用class.getResourceAsStream() 代替FileFileReader 来阅读它。以下是如何做到这一点的解释:How to really read text file from classpath in Java

【讨论】:

  • 感谢您的回复。请告诉我如何将我的文本文件放入 jar 文件中。
  • @Anup 你试过什么?你现在如何构建你的 jar 文件?
  • 我正在通过 Eclipse 构建 jar 文件。我选择 Export 选项,然后选择 runnable Jar,最后选择类。我没有任何选择其他文件夹的选项。
  • 我认为这将解释如何做到这一点:stackoverflow.com/a/7284648/61624
  • @ScottScooterWeidenkopf - 感谢您的回复。是的,我尝试了该选项和所有其他选项。但也有同样的结果。 jar 文件中没有文件。
【解决方案2】:

问题解决了!

方法如下:

1) 右键单击​​您的项目文件夹并创建一个新文件夹。

2) 将要打包到 jar 中的所有文件移动到该文件夹​​中。

3) 单击project -> properties -> Build Path -> Source -> Add Folder 并选择您刚刚创建的文件夹。

4) 创建你的 JAR!

由于您已经创建了包含 abc.txt 的文件夹,因此您可以跳过第 1 步和第 2 步

编辑:确保 JAR 包含这些文件的一种方法是使用 7zip。

【讨论】:

  • 非常感谢。我按照您的指定创建了 jar 文件,并在 jar 文件中获得了文本文件。但是现在我无法找到从我的代码中访问该文件的方法。所以当我运行我的 jar 文件时,我得到了 FileNotFound 异常。我无法使用该文件并阅读内容。如果您对此有任何疑问,请告诉我。
  • 我自己从来没有这样做过,但是浏览了一下之后我发现了thisstackoverflow 的问题。看来您可以使用 ClassLoader 访问您的类路径上的文件,其中包括您的 abc.txt
  • 哦,我想我可能找到了answer
  • 感谢您的链接。我使用了 getResourceAsStream() 方法。我使用链接来参考,我发现还有一个链接非常清晰和有用。 [链接] (alvinalexander.com/blog/post/java/… 使用此链接并解决了问题。但我感谢您的帮助.. 非常感谢..
  • @Anup 嘿,您的特定链接已损坏。
猜你喜欢
  • 2011-09-18
  • 2013-06-08
  • 1970-01-01
  • 2011-02-24
  • 2014-10-28
  • 2011-01-16
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多