gpt4 book ai didi

java - 为什么我的图书馆无法访问其资源?

转载 作者:行者123 更新时间:2023-12-01 10:45:33 26 4
gpt4 key购买 nike

我有一个读取文件的类:

package classlibrary;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;

public class ReadingResource {
public static String readResource() throws IOException {
URL resource = ClassLoader.getSystemClassLoader().getResource("classlibrary/test_file.txt");
BufferedReader br = new BufferedReader(new FileReader(resource.getPath()));
return br.readLine();
}
}

资源文件与此类位于同一目录中。我用这个类和文件创建了一个库。

现在我想在另一个类中使用它:

package uritesting;

import classlibrary.ReadingResource;
import java.io.IOException;

public class URITesting {
public static void main(String[] args) throws IOException {
System.out.println(ReadingResource.readResource());
}
}

当我从此类中创建 .jar 文件时,将该类设置为主类,从上面添加 .jar 并将其作为“java -jar URITesting.jar”执行,我得到一个 FileNotFoundException,说该类 ReadingResource 找不到指定的文件。有趣的是,异常消息中指定的路径实际上是文件的正确路径。

您可以找到文件here .

编辑:我在 NetBeans 中开发了该项目。当我在那里运行它时,它工作得很好。在这种情况下,类路径是不同的。它包含 URITestingProjectReadingResource 的资源。

但是,当我将其作为独立 JAR 运行时,类路径仅包含 URITestingProject。对我来说奇怪的是它没有提示找不到类ReadingResource。这意味着它已加载,尽管它不在类路径中:/

最佳答案

问题是resource.getPath()。无法计算对文件读取器、jar 文件内、另一台服务器等有效的路径。但是,您可以通过流来获取数据:

    InputStream data = ClassLoader.getSystemClassLoader().getResourceAsStream("classlibrary/test_file.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(data, "utf-8"));

作为旁注:使用阅读器阅读时,最好指定编码:

关于java - 为什么我的图书馆无法访问其资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34203174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com