3

我将一些.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");

我得到了流!

4

2 回答 2

2

正如您在发布问题后不久就发现自己的那样,这很有效:

InputStream is = getClass().getResourceAsStream("/resources/file.txt");

之所以有效,而您的原始代码不起作用,是因为zip 文件中的“文件”(jar 文件是 zip 文件)在提取之前不是真正的文件。但是提取文件是你想要做的,所以在你的程序中,它不是一个真正的文件。所以这个问题是一个XY 问题:你想创建一个 File 对象,但那是不可能的——你需要参考你最初尝试做的事情,这是从 zip 条目中读取的。

于 2018-12-03T21:51:32.747 回答
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
于 2011-11-16T13:48:38.677 回答