创建包含外部文件的可运行Jar文件

14

我想在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文件中”。为什么不行? - user207421
2个回答

14

1
谢谢您的回复。请问我该如何将我的文本文件放入jar文件中? - Anup
@Anup 你尝试过什么?你现在是如何构建你的jar文件的? - Daniel Kaplan
1
我正在通过Eclipse构建jar文件。我选择导出选项,然后是可运行的Jar,最后选择类。我没有得到任何选择其他文件夹的选项。 - Anup
我认为这将解释如何做到这一点:https://dev59.com/_1rUa4cB1Zd3GeqPoOR8#7284648 - Daniel Kaplan
1
@ScottScooterWeidenkopf - 谢谢你的回复。是的,我尝试了那个选项和所有其他选项。但结果都一样。jar文件里没有文件。 - Anup
显示剩余3条评论

14

问题已解决!

方法如下:

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

2)将您想要打包到JAR文件中的所有文件移动到该文件夹中。

3)点击 项目 -> 属性 -> 构建路径 -> 源 -> 添加文件夹 并选择您刚刚创建的文件夹。

4)创建您的JAR文件!

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

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


非常感谢。我按照您指定的方式创建了JAR文件并在JAR文件中找到了文本文件。但现在我无法找到从我的代码中访问该文件的方法。因此,当我运行JAR文件时,我遇到了FileNotFound异常。我无法使用该文件并读取其内容。如果您有关于此事的任何信息,请告诉我。 - Anup
我自己从未尝试过,但在浏览了一下后,我找到了这个stackoverflow问题。看起来你可以使用ClassLoader来访问类路径上的文件,其中包括你的abc.txt。 - scottysseus
哦,我想我可能已经找到了答案 - scottysseus
谢谢你提供的链接。我使用了getResourceAsStream()方法。我使用了这个链接作为参考,还有一个链接,我发现非常清晰和有用。[链接] (http://alvinalexander.com/blog/post/java/read-text-file-from-jar-file)。我使用了这个链接并解决了问题。但是我非常感谢你的帮助。非常感谢。 - Anup
@Anup 嘿,你提供的链接已经失效了。 - inquisitive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接