2013-03-22 37 views
0

我在Eclipse中有一个Java应用程序,它引用.XML文件作为其他功能的模板。通常我不打包这些文件中的.jar文件,因为将它们放在同一文件夹中的.jar文件中似乎做工精细与此引用:从与应用程序相同的JAR文件中引用文件

File myFile = new File("templates/templateA.xsd"); 

我现在要求这些模板被放置在同一个。 JAR文件作为这个应用程序。我可以包括他们没有问题,但这些参考不再起作用。

在应用程序运行的相同.JAR中是否有正确的方式引用.XML文件?

回答

1

如果你只是需要读取这个文件,你可能不需要的java.io.File只是一个InputStream,你可以通过

this.getClass().getResourceAsStream("templates/templateA.xsd") 

得到,如果你真的需要一个java.io.File中。 ..我不知道...上一次真的需要一个文件,我只是将InputStream复制到一个临时文件,但这很丑陋。

+0

我在这里有同样的问题,我在上面的评论中提到。用我当前的文件层次结构,我总是以null输入流结束。 – ricgeorge 2013-03-22 09:58:20

+0

这是因为路径相对于.java,它在'this.getClass()。getResourceAsStream(“templates/templateA.xsd”)'中执行'.getClass()'。 您可以尝试使用System类:'System.getClass()。getResourceAsStream(“templates/templateA.xsd”)''或简单地将资源文件放在与使用它的java类相同的目录中,并使用'this。的getClass()。的getResourceAsStream( “templateA.xsd”)”。 – user2147970 2013-03-22 10:13:38

+0

使用系统给我一个有关从非静态方法getClass()进行静态引用的错误。移动文件不幸的是不是一个真正的选择。 – ricgeorge 2013-03-22 10:37:51

2

您需要知道如何从类路径加载文件。 的方式之一是如下

class XMLLoader { 

    public String loadXML(String fileName){ 
     InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(fileName); 
    // do the loading of the file from the given input stream. 
    } 

}你知道的“模板”文件夹中应该是你的罐子里面

+0

我以前见过这个实现,但每当我尝试它时,我都会得到一个空输入流。我有一个使用此代码的称为XML Loader的单独类。这意味着该类当然位于src文件夹中。我需要的xml文件位于源文件夹之前,名为Templates的根目录下。 – ricgeorge 2013-03-22 09:54:17

+0

请检查是否正确的jar是你的班级路径的一部分。 – nvseenu 2013-03-25 11:18:25

相关问题