Java 在.jar中包含其他文件

Java 在.jar中包含其他文件,java,jar,Java,Jar,好的,我正在尝试使用java程序打开HTML文档。所以,我已经有了一个网站。我有一个单独的文件夹,称为“网站”,是旁边的src文件的网站。然后我想把src文件夹和website文件夹放到同一个.jar文件中,这样你就可以把.jar文件发送到任何一台计算机上,当你运行它时,它就会打开网站。我不确定我的措辞是否恰当,所以如果您需要更多规格,请告诉我 下面是打开HTML文件的代码 import java.awt.Desktop; import java.io.File; import java.io.

好的,我正在尝试使用java程序打开HTML文档。所以,我已经有了一个网站。我有一个单独的文件夹,称为“网站”,是旁边的src文件的网站。然后我想把src文件夹和website文件夹放到同一个.jar文件中,这样你就可以把.jar文件发送到任何一台计算机上,当你运行它时,它就会打开网站。我不确定我的措辞是否恰当,所以如果您需要更多规格,请告诉我

下面是打开HTML文件的代码

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

public class BrowserTest {
    public static void main(String[] args) {
        String url = "framePage.html";
        File htmlFile = new File(url);
        try {
            Desktop.getDesktop().browse(htmlFile.toURI());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
更新代码

import java.awt.Desktop;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;

public class BrowserTest {
    public static void main(String[] args) {
        System.out.println(BrowserTest.class.getResource("/Website/framePage.html"));
        URL url = BrowserTest.class.getResource("/Website/framePage.html");


        try {
            Desktop.getDesktop().browse(url.toURI());
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }
}
使用命令行(例如windows上的CMD或基于unix的操作系统的Terminal),您可以使用以下命令创建.jar存档:
jar cf myJar.jar*


其中myJar.jar是输出文件。*将存档当前目录中的所有内容,因此在使用此命令之前,请在控制台中导航到包含所有文件的目录。

更新

如果不需要Web服务器,只需执行以下操作:

  • 创建一个简单的Maven项目
  • 将您的网站复制到
    src/main/java
    文件夹。它将自动包含在
    jar
  • 编写一些代码,将您的网站从
    classpath
    提取到包含
    jar
    文件夹


  • 您必须在jar中嵌入一个web服务器。有多种方法可以做到这一点。但我建议您尝试Spring Boot。

    只需在jar命令中指定它(假设您从src内部运行):

    资料来源:

    获得该结构后,可以按如下方式检索文件:

    // Get current classloader
    ClassLoader cl = this.getClass().getClassLoader();
    // Create page class
    Page customPage  = new Page(cl.getResource("website/page1.html"));
    

    Dupe:

    也许你应该先看看和。请注意,如果您使用像Ant或像样的IDE这样的东西,您可能会发现这会更容易,这会使整个过程变得更加复杂simpler@MadProgrammer我用的是Eclipse,它似乎不太管用,也不完全熟悉Eclipse,但是您应该能够告诉它将
    网站
    目录包含在jar中,或者直接将其放置在
    src
    目录中,并且应该包含它。然后需要使用
    BrowserTest.class.getResource(“/website/framePage.html”)
    生成对它的
    URL
    引用。@我相信这是最有效的方法,我只有一个问题似乎无法解决。当我创建文件时,它会将网站的位置添加到eclipse中存储项目的位置。例如:
    File htmlFile=new文件(BrowserTest.class.getResource(“/Website/framePage.html”).toString()
    如果我这样做,我会得到一个错误:“无法打开文件:/C:/Users/Ryan/EclipseWorkspace/BrowserTest/file:/C:/Users/Ryan/EclipseWorkspace/BrowserTest/bin/Website/framePage.html”不,不要使用
    文件
    ,只需直接使用
    URL
    。您不能将嵌入式资源视为文件,它们不是,它们现在是zip文件中的一系列字节,就像一组平面HTML文档一样。我怀疑它是否需要一个嵌入式Web服务器,特别是因为他已经有了通过
    文件://
    URI启动浏览器的代码。此外,这个问题只是关于如何打包和访问JAR中的文件。好吧,我太担心了。某些平面站点无法使用
    文件://
    方案运行
    // Get current classloader
    ClassLoader cl = this.getClass().getClassLoader();
    // Create page class
    Page customPage  = new Page(cl.getResource("website/page1.html"));