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

Mar*_*boe 3 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();
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢,
马丁

leo*_*loy 5

URI仅表示方案时的"文件" file:.并且构造函数File(URI)在此清楚.您不能将jar中的压缩文件视为File,因为......它不是Java认为的File:读取File类所代表的定义:

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

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

  • 我使用`URL`(或URI).它可以被视为包含文件(scheme`file:`)和jars(scheme`jar:`)中的资源的泛化作为特例.但请记住:java`File`在概念上只是路径,将其视为文件的名称.它是资源的标识符(不一定是打开的,甚至可能不存在).不要将该概念与文件内容混合在一起.流是一种内容. (2认同)