Java 在运行时将getResource()转换为文件

Java 在运行时将getResource()转换为文件,java,io,getresource,Java,Io,Getresource,我把一些.txt文件放在src文件夹下(在resources文件夹中) 但是我无法在运行时从该资源创建有效的文件 String path = this.getClass().getResource("/resources/file.txt").getFile(); File file = new File(path); if (!file.exists()) { } 我从eclipse运行我的程序。我没有在类路径中输入任何内容。 我希望我的文本文件被嵌入.jar文件中,当我运行我的应用程序时

我把一些
.txt
文件放在
src
文件夹下(在
resources
文件夹中)

但是我无法在运行时从该资源创建有效的
文件

String path = this.getClass().getResource("/resources/file.txt").getFile();
File file = new File(path);

if (!file.exists()) {
}
我从eclipse运行我的程序。我没有在类路径中输入任何内容。
我希望我的文本文件被嵌入
.jar
文件中,当我运行我的应用程序时,我希望抓取这些文件并将它们复制到某个位置

更新

如果我这样做,
InputStream=getClass().getResourceAsStream(“/resources/file.txt”)


我得到了那条小溪

您说过您正在使用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

由于您在发布问题后不久就发现了自己的问题,这一点很有效:

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

虽然您的原始代码没有这样做,但这是因为zip文件中的“文件”(jar文件是zip文件)在解压缩之前不是真实的文件。但是提取文件是您要做的,所以在程序中,它不是一个真正的文件。因此,这个问题是:您想创建一个文件对象,但这是不可能的-您需要返回到最初尝试执行的操作,该操作是从zip条目读取的。

如何尝试创建文件?是否使用
新文件(路径),当为“是”时,是否有任何异常?是否尝试提供绝对路径?是否确定txt文件正在进入classes目录?取决于你是如何构建的,情况可能并非如此。@Andres Olate,你是说我是如何构建的?我将文件放在这个文件夹中,并从eclipse运行。@CSchulz,没有例外!file.exists()被触发当我构建项目时,它会自动将包含文本文件的文件夹复制到binbin中,binbin是它应该所在的位置。当您将/resources文件夹留在bin中并运行程序时会发生什么情况?您是从eclipse运行程序,还是将其打包为jar文件并从jar文件运行?(拖动外部文件/创建文件夹)到java源代码所在的“src”文件夹下的eclipse项目树中,将自动(将文件复制到/创建文件夹到生成类的“bin”树中)(1:1关系)。因此,“src”=“bin”下的“/resources/file.txt”文件夹下的“/resources/file.txt”文件夹生成的.class必须正确引用存在“/resources/file.txt”的包树结构。看起来像这样。class必须在“package”节点下才能访问“/resources/file.txt”上的资源。想象一下,这就像通过
dir
ls
命令提示符浏览一样。您现在必须知道与该文件相对的位置…您能告诉包含上述代码的.java文件的名称及其包名(如果存在)吗。