如何将资源添加到jar文件中

4

我需要将一个Excel文件添加到我的jar包中,以便它可以移植。我知道答案是使用getClass().getResource...,但我不知道如何使用这段代码。

我的Excel文件在src文件夹中与我的类文件一起,它在NetBeans中工作,但在另一台电脑上打开jar文件时却出现了FileNotFoundException异常。

这是我所使用的代码:

public class WindageLogic {

  //....
  public void GetValues() throws Exception
    {


    File exel=new File("src/Calculator/table1.xls");

     Workbook w1; //reads from file

     //reads from file
     w1 = Workbook.getWorkbook(exel);

有人能给我提供代码吗?我想实现从jar应用程序中访问此文件。我已经在网上寻找了整个周末,但是我不懂如何使用这些getresource技术。

非常感谢。

2个回答

2
如果您的Excel文件是一份资源,那么您不能使用File来操作它,而应该使用资源,我认为它是只读的——您确定这就是您想要做的吗?您可以加载一个命令行字符串,告诉程序从哪里开始查找文件,或者创建一个属性文件,告诉程序首先查找哪里。
编辑1: 如果您正在使用JExcel,则可以调用Workbook.getWorkbook(java.io.InputStream is)并通过Class的getResourceAsStream(...)方法将资源作为流获取。
例如,
  public void GetValues() throws Exception   {
     Workbook w1; //reads from file
     w1 = Workbook.getWorkbook(WindageLogic.class.
          getResourceAsStream("/Calculator/table1.xls") );
     //...

是的,我只需要读取这个文件。抱歉,但我对此完全不懂,请问我应该将WindageLogic.class.getResourceAsStream("/Calculator/table1.xls")分配给一个变量,比如字符串,还是将其输入到某个地方..您能否给我们一个快速的示例来说明如何使用它,非常感谢,我相信这是我的解决方案。 - Faz006
@Fax006:方法Workbook.getWorkbook(...)只能从文件中读取,还是可以使用URL? - Hovercraft Full Of Eels
参数是:getWorkbook(java.io.File file),所以我认为我不能使用URL。 - Faz006
jxl库,import jxl.*;是我使用的导入 - Faz006
3
@Faz006。你真的需要学习阅读Javadoc。你所问的大多数问题在java.lang.Class和Workbook的Javadoc中都有答案。 - JB Nizet
显示剩余9条评论

1
为了使getClass().getResource()方法工作,资源应该在应用程序的类路径中可用(可以打包在其中一个jar文件中,也可以简单地放在磁盘上的一个包含在类路径中的文件夹中)。
根据您使用的IDE或代码构建工具,有多种确保完成此操作的方法。
最简单的方法是将src文件夹放在运行类路径中:java -classpath src:%CLASSPATH% <your.class.name>

它与其他类文件一起打包在jar文件中,但我无法访问它。 - Faz006
请确保路径正确并包含在类路径中。使用以下命令列出jar条目:jar -tf <your.jar.file>您应该使用此路径:“/Calculator/table1.xls”来检索文件。 - Mihai Toader
我应该输入这个命令吗:jar -tf "C:\dist\WindageCalculator.jar" - Faz006
要查看您的jar文件中的条目,是的。然后,您必须使用其中提供的条目将其作为资源加载(可以是绝对路径,即以“/”开头,也可以是相对于加载资源的类的路径,即不以“/”开头)。 - Mihai Toader
我可以使用类似以下的方式:WindageLogic.class.getResourceAsStream("/Calculator/table1.xls"),但我不知道如何在我的代码中使用它,你能给我们一个快速的例子吗? - Faz006
我刚刚把我的 Excel 文件放在 src 文件夹中:http://img29.imageshack.us/img29/6858/javagf.jpg - Faz006

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