我正在尝试将一些文本文件作为资源包含在我的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对象。
我该如何解决这个问题?
谢谢,
马丁
答案 0 :(得分:5)
仅当方案为file:
时,URI才表示“文件”。
构造函数File(URI)对此很清楚。
您不能将jar中的打包文件视为文件,因为......它不是Java认为的File
:阅读what the File class represents的定义:
文件和。的抽象表示 目录路径名。
正如你所说,阅读的方式是getResourceAsStream()
。
答案 1 :(得分:1)
你做不到。 java.io.File是对文件系统上的路径和路径名的抽象。如果要引用JAR中的文件,则需要坚持使用URL域。