我在.txt
文件夹下(src
文件夹中)放了一些resources
个文件。
但我无法在运行时从此资源创建有效的File
。
String path = this.getClass().getResource("/resources/file.txt").getFile();
File file = new File(path);
if (!file.exists()) {
}
我从eclipse运行我的程序。我没有在课堂上放任何东西。
我希望我的文本文件嵌入到.jar
文件中,当我运行我的应用程序时,我想抓取这些文件并将它们复制到某个位置。
更新
如果我InputStream is = getClass().getResourceAsStream("/resources/file.txt");
我得到了流!!
答案 0 :(得分:1)
发布问题后不久您就发现自己了,这有效:
InputStream is = getClass().getResourceAsStream("/resources/file.txt");
原因 起作用,而原始代码无效,这是因为zip文件(jar文件是zip文件)内部的“文件”直到它才是真实文件已被提取。但是,提取文件是您要尝试执行的操作,因此,在程序中,这并不是一个真正的文件。因此,这个问题是一个X-Y problem:您想创建一个File对象,但这是不可能的-您需要参考从zip条目读取的原始内容。>
答案 1 :(得分:0)
你说你正在使用eclipse,并且你将文本文件拖放到“src”包中。 “src”不是一个包。它只是一个文件系统目录。默认情况下,在eclipse中的Java项目中,所有源代码都存储在名为“src”的目录中,所有.class文件都存储在名为“bin”的目录中。 getClass()。getResource()解析为.class文件的位置。您必须将文本文件移动到“bin”目录中。
你班上有什么课程?
我在默认包中为你的代码写了非常相似的代码并在eclipse中运行。
import java.io.File;
public class ResourceTest {
public static void main(String[] args) {
ResourceTest rt = new ResourceTest();
rt.openFile();
}
public void openFile() {
String path = this.getClass().getResource("/resources/file.txt").getFile();
File file = new File(path);
System.out.println(path);
System.out.println(file.getAbsolutePath());
System.out.println(file.exists());
}
}
我看到了这个输出:
/C:/Users/rab29/Documents/eclipse/Overflow/bin/resources/file.txt
C:\Users\rab29\Documents\eclipse\Overflow\bin\resources\file.txt
true