当前位置: 首页 > 知识库问答 >
问题:

如何将资源文件打包到可运行的jar中

谷梁宝
2023-03-14

我已经尝试了很多方法,并遵循了几个在线说明,比如这个-Eclipse导出的Runnable JAR不显示图像,但到目前为止,没有成功。

我有一个非常简单的程序,读取一个文本文件(test.txt),并将其内容打印到标准输出。我正在使用Eclipse。这是我所做的-

  • 我将文本文件放入名为“资源”的文件夹中

任何帮助都将不胜感激。

附录:这是代码。

public class FileIOTest {

public static void main(String[] args) {
    String line;
    try {
        BufferedReader br = new BufferedReader(new FileReader(new File("/test.txt")));
        while((line = br.readLine()) != null){
            System.out.println(line);
        }

    br.close(); 
    }
    catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}

}

}

共有3个答案

宓诚
2023-03-14

你可以在没有日蚀的情况下创建jar。例如,如果我在包src(目录相同)中有一个Demo类,并且资源文件(名为testing.txt)在资源目录中。我添加一个Manifest.txt文件@目录的根目录:

Manifest-Version: 1.0
Main-Class: src.Demo

Demo类看起来像:

package src;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Demo {

    public static void main(String... args) {

        try (BufferedReader br = new BufferedReader(new InputStreamReader(Demo.class.getResourceAsStream("/resources/testing.txt"))))
        {

            String sCurrentLine;

            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

测试。txt文件类似于:

hello world
How are you?

编译Demo.java获得Demo.class

javac src/Demo.java 

创建jar

jar cfm myJar.jar Manifest.txt src/* resources/*

然后运行它

java -jar myJar.jar 

在eclipse中,只需在类路径中添加resources文件夹(确保它在jar中),并将其作为类路径资源读取(使用getResourceAsStream方法)

狄卓君
2023-03-14

文件的工作方式与资源不同。如果您想要一个资源,那么您不应该尝试使用任何File(Xxx)变体,这些变体将在文件系统上显示。

您提供的链接使用了返回URL的Class.getResources,但也有返回InputStreamClass.getResourceAsStream,您可以将其包装为InputStreamReader .举个例子

InputStream is = FileIOTest.class.getResourceAsStream("/text.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));

傅阿苏
2023-03-14

您不能通过文件读取器访问Jar文件中的资源,因为它不是文件系统中的文件。Java确实有一种机制来访问类路径(包括JAR)中的资源:ClassLoader。getResourceAsStream()。您可以将其与默认类加载器一起使用:

BufferedReader br = new BufferedReader(new InputStreamReader(
                        ClassLoader.getSystemClassLoader()
                                   .getResourceAsStream("resource/test.txt")));

注意getResourceAsStream返回null而不是抛出异常,所以您可能想先获取流,检查是否为null,然后抛出异常或处理它。

您将希望将jar中的完整路径作为您的路径。

 类似资料:
  • 问题内容: 我最近用Slick2D开发了一个游戏,我直接访问了所有图像,例如 与使用将加载资源的类或使用输入流相反。 我想知道是否仍然可以将所有资源加载到jar中,我将该文件夹添加到了我的buildpath中,并使用jarsplice添加了我的库和本机,但是jar无法运行,因为它找不到图像。 问题答案: 正在研究运行应用程序的根文件系统。如果要使用jarfile中打包的资源,则必须执行以下操作:

  • 我需要创建一个应用程序,使用各种参数,如高度,体积或基础面积排序各种类型的多边形。将通过命令行传递具有多边形参数、排序类型参数、排序方法参数的文件名的参数。该文件位于项目中的“我的资源”文件夹中的“我的src”文件夹之外。我已经实现了所有的程序,当我通过eclipse运行配置使用pass参数运行时,它工作得很好。但是当我尝试使用cmd相同的参数运行我的.jar文件时,它给出了。 我使用打开了我的j

  • 我在使用Scala在Eclipse中创建一个可运行的jar文件时遇到了一些麻烦。 在Eclipse中,我有一个Scala项目,我希望将其变成一个可运行的jar文件。当我运行jar文件时,它找不到Scala标准库。 IDE-我正在使用Scala IDE扩展Eclipse以适应Scala的使用。 Setup-要导出,右键单击我的项目并向下导航export>Runnable Jar文件。我选择运行配置并

  • 问题内容: 我需要从罐子中加载属性文件。该罐子包含在war文件中。这是结构 现在,我在一个servlet中编写了以下代码,如下所示: 但是上面的代码我得到流为空。如果我将属性文件放在ROOT.war / WEB- INF中,则可以正常工作。我有一个不错的主意,如果getResourceAsStream中的路径以“ /”开头,那么它将在上下文根目录中搜索资源。但是,如何读取位于jar的资源,该jar

  • 问题内容: 我知道还有其他针对同一问题的问题,但问题是解决方案对我不起作用。我有一个小工具,它应该读取我想拥有的文件并将其打包为资源,并依赖于其他我希望将其作为jar而不是单个类的项目(我正在使用Eclipse Helios)。 作为Eclipse中的应用程序,我可以通过以下方式访问资源 当且仅当将资源文件夹放置在输出路径(已编译的源)下时,并且如果将其放置在src文件夹中时,则不是这样。 当我打

  • 问题内容: 我有一些可怕的行为。我有以下Maven配置: 这将创建包含所有类的JAR文件,但我在类路径中有一些资源也应包括在内。如果我将参数放在阶段的前面,那么我的所有资源都会包括在内。如果我使用运行Maven ,则不包含任何资源。我的资源位于(不是通常的目录)下。 问题答案: 目标配置中未正确定义资源的源目录。同样,outputDirectory元素将资源放置在dir中,默认情况下将其打包。试试