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