编译包含外部文件的Java文件。(chm)

编译包含外部文件的Java文件。(chm),java,netbeans,compilation,chm,Java,Netbeans,Compilation,Chm,我正在用java编写一个1文件程序,我有一个.chm文件,当用户询问如何使用该程序时,我希望调用该文件。我不希望该文件位于.jar文件之外 也许我所问的是不可能的,关于编译,我所知道的唯一一件事是,如果我点击“clean and build”按钮,它会从我的.java文件中生成一个.jar文件。有办法做到这一点吗 PS:我使用NetBeans创建java程序。您可以在jar中包含任何文件(它是一个zip文件)。然后,您必须使用获取对jar中嵌入文件的访问权。这将返回一个,您可以通过调用和读取来获

我正在用java编写一个1文件程序,我有一个
.chm
文件,当用户询问如何使用该程序时,我希望调用该文件。我不希望该文件位于
.jar
文件之外

也许我所问的是不可能的,关于编译,我所知道的唯一一件事是,如果我点击“clean and build”按钮,它会从我的
.java
文件中生成一个
.jar
文件。有办法做到这一点吗


PS:我使用NetBeans创建java程序。

您可以在jar中包含任何文件(它是一个zip文件)。然后,您必须使用获取对jar中嵌入文件的访问权。这将返回一个,您可以通过调用和读取来获取
InputStream
,可能会将其提取到硬盘上进行显示,等等

其用途是将这些文件放在“src”目录内的“resource”或“res”文件夹中。以下是它在我的Eclipse中的外观:

然后,我通过以下方式访问我的图像:

URL uImg = getClass().getResource("/res/16/Actions-edit-delete-icon-16.png");
InputStream is = uImg.openStream();
// Read the content from 'is' e.g. to extract it somewhere
is.close();
编辑:例如,要将jar的
“res”
目录中的文件
“TJ.chm”
提取到文件
“/tmp/TJ.chm”
中,您需要:

// Add all necessary try/catch
InputStream is = ucmh.openStream();
OutputStream os = new BufferedOutputStream(new FileOutputStream("/tmp/TJ.chm"));
int len = 0;
byte[] buffer = new byte[8192]; // Or whichever size you prefer
while ((len = is.read(buffer)) > -1)
    os.write(buffer, 0, len);
os.close();
is.close();

陛下你能用图片吗P@user3212168对不起,我使用Eclipse。我将尝试添加我所拥有的:)@user3212168我编辑了我的答案,并添加了一个关于它在Eclipse上的外观的图像。请注意,在NetBeans上应该是相同的,因为您必须在“src”源目录下添加资源目录。如果我试图在res文件夹上打开一个名为TJ.chm的文件,代码会是什么样子?@user3212168我添加了一个完整的示例,说明如何提取硬盘上的文件。告诉我这对你来说是否足够。