如何从静态上下文中获取getclass().getResource()?

45

我有一个函数,想要将文件加载到一个URL对象中,因为示例项目是这样做的。

public class SecureFTP {

    public static void main(String[] args) throws IOException , ClassNotFoundException, SQLException , JSchException, SftpException{
        File file = new File("/home/xxxxx/.ssh/authorized_keys");
        URL keyFileURL = this.getClass().getClassLoader().getResource(file);

我尝试使用SecureFTP.class.getResource,但仍无法编译。

我对Java还比较新手,所以我知道我在做什么错误的事情。

6个回答

74

主方法是一个静态方法,因此尝试访问 this (即当前对象)将不起作用。 可以将该行替换为

URL keyFileURL = SecureFTP.class.getClassLoader().getResource("/home/xxxxx/.ssh/authorized_keys");

2
这正是 OP 尝试过的。仔细阅读问题。问题在于他将一个文件传递给方法,而不是一个字符串。 - JB Nizet
你是对的。我修改了我的回答。然而,OP尝试使用SecureFTP.class.getResource,没有调用getClassLoader。 - Robin
你的方法行不通:getResource 不会从文件系统加载资源,而且资源名称不以 / 开头。请阅读我的答案。 - JB Nizet

28

22

虽然这个问题比较老,但还没人提到可以在静态上下文中完成此操作:

ClassLoader classLoader = ClassLoader.getSystemClassLoader();
classLoader.getResource("filename");

1
这个答案对我有用(我甚至已经点赞了它)。然而,当我尝试运行 mvn exec:java 时,它无法找到资源。使用其他答案中的方法 (SecureFTP.class.getClassLoader().getResource) 解决了这个问题。 - Zvika

9

4
SecureFTP.class.getClassLoader().getResource(<<your resource name>>); 

应该能解决问题!

0

这样做可以使它从静态方法或实例方法中都能正常工作:

public static String loadTestFile(String fileName) {
    File file = FileUtils.getFile("src", "test", "resources", fileName);
    try {
        return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
    } catch (IOException e) {
        log.error("Error loading test file: " + fileName, e);
        return StringUtils.EMPTY;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接