无法为Jar中的文件创建File对象

时间:2010-06-19 21:33:52

标签: java jar distribution

我正在尝试将一些文本文件作为资源包含在我的runnable .jar文件中。以下代码应该打印一个文件的内容:

URI resourceFile = Driver.class.getResource("/etc/inputfile.txt").toURI();
System.out.println("Opening URI: " + resourceFile.toString());
File infile = new File(resourceFile);

Scanner sc = new Scanner(infile);
while (sc.hasNextLine())
    System.out.println(sc.nextLine());
sc.close();

导出为runnable jar后,运行时得到以下输出:

  

打开URI:rsrc:etc / inputfile.txt
    java.lang.IllegalArgumentException:URI不是分层的             在java.io.File。(File.java:363)

如果我使用getResourceAsStream,可以毫无问题地打印文件,但出于其他原因我想使用File对象。
我该如何解决这个问题?

谢谢,
马丁

2 个答案:

答案 0 :(得分:5)

仅当方案为file:时,URI才表示“文件”。 构造函数File(URI)对此很清楚。 您不能将jar中的打包文件视为文件,因为......它不是Java认为的File:阅读what the File class represents的定义:

  

文件和。的抽象表示   目录路径名

正如你所说,阅读的方式是getResourceAsStream()

答案 1 :(得分:1)

你做不到。 java.io.File是对文件系统上的路径和路径名的抽象。如果要引用JAR中的文件,则需要坚持使用URL域。