getResource()在运行时到文件

时间:2011-11-16 13:27:05

标签: java io getresource

我在.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");

我得到了流!!

2 个答案:

答案 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