在部署Jar时出现FIle Not Found异常

时间:2014-01-14 07:54:28

标签: java netbeans jar

我正在获取文件未找到异常,以便在成功编译后从部署的jar中访问File对象中的文件。在这种情况下,文件放在src的默认文件夹中,并通过 src / filename.txt 进行访问。

甚至尝试了MyClass.class.getResource(“/ file.txt”)。getPath();访问文件 Dir Structure http://i43.tinypic.com/2dble0k.png

File filterFile=new File("win.txt");
File currentFile=new File("winP.txt");

请提供建议,即将文本文件放在netbeans中以供jar部署。

1 个答案:

答案 0 :(得分:0)

您需要区分文件和资源。每个文件也是一种资源,但反之亦然。在JAR文件中,您没有文件,只有资源。

使用类加载器也可以加载资源。所以你必须首先检索一个类加载器,然后用它加载资源:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL resourceUrl = loader.getResource(resourceName);
try (InputStream in = resourceUrl.openStream()) {
    // load bytes from the input stream here
}
// process the loaded resource bytes here

现在放置文件的位置?您可以将它们放入JAR的根目录中。在项目内部,这意味着将资源文件放入文件夹src。或者你把它们放在一个包中,让它们放在需要它的类旁边。

如果放入根目录,则只能通过资源名称访问它们。如果放入子目录(包),则必须在资源名称前加上该路径 - 从根开始。例如:

URL resourceUrl = loader.getResource("my/pkg/win.txt");

只是方便:如果资源文件与需要该资源的类放在同一个包中,您也可以使用该类本身进行加载(而不是类加载器):

URL resourceUrl = getClass().getResource("win.txt");

注意,在这种情况下,目录结构被省略。

在您的示例中,您创建了一个文件对象。如果您以后使用该文件对象创建FileInputStream,那么您可以使用上面描述的InputStream而不是。{/ p>