为什么我的图书馆无法访问其资源?
Why can my library not access its resources?
我有一个 class 读取文件:
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();
}
}
资源文件与class在同一目录。
我用这个 class 和文件制作了一个库。
现在我想用在另一个class:
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());
}
}
当我用这个 class 制作一个 .jar 文件时,将 class 设置为主 class,从上面添加 .jar 并将其作为 [=34] 执行=] 我得到一个 FileNotFoundException,说 class ReadingResource
找不到指定的文件。这很有趣,因为异常消息中指定的路径实际上是文件的正确路径。
您可以找到文件 here。
编辑:
我在 NetBeans 中开发了该项目。当我 运行 它在那里时,它工作正常。在那种情况下 classpath 是不同的。它包含 URITestingProject
和 ReadingResource
的资源。
但是,当我 运行 它作为独立的 JAR 时,class 路径仅包含 URITestingProject
。令我感到奇怪的是,它不会抱怨找不到 class ReadingResource
。这意味着它已加载,尽管它不在 class 路径中:/
问题是resource.getPath()
。无法计算路径,对文件 reader 有效,在 jar 文件中,在另一台服务器上等等。但是,您可以改为通过流获取数据:
InputStream data = ClassLoader.getSystemClassLoader().getResourceAsStream("classlibrary/test_file.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(data, "utf-8"));
附带说明:使用 reader 阅读时最好指定编码:
我有一个 class 读取文件:
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();
}
}
资源文件与class在同一目录。 我用这个 class 和文件制作了一个库。
现在我想用在另一个class:
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());
}
}
当我用这个 class 制作一个 .jar 文件时,将 class 设置为主 class,从上面添加 .jar 并将其作为 [=34] 执行=] 我得到一个 FileNotFoundException,说 class ReadingResource
找不到指定的文件。这很有趣,因为异常消息中指定的路径实际上是文件的正确路径。
您可以找到文件 here。
编辑:
我在 NetBeans 中开发了该项目。当我 运行 它在那里时,它工作正常。在那种情况下 classpath 是不同的。它包含 URITestingProject
和 ReadingResource
的资源。
但是,当我 运行 它作为独立的 JAR 时,class 路径仅包含 URITestingProject
。令我感到奇怪的是,它不会抱怨找不到 class ReadingResource
。这意味着它已加载,尽管它不在 class 路径中:/
问题是resource.getPath()
。无法计算路径,对文件 reader 有效,在 jar 文件中,在另一台服务器上等等。但是,您可以改为通过流获取数据:
InputStream data = ClassLoader.getSystemClassLoader().getResourceAsStream("classlibrary/test_file.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(data, "utf-8"));
附带说明:使用 reader 阅读时最好指定编码: