У меня есть класс, который считывает файл:Почему моя библиотека не может получить доступ к своим ресурсам?
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.
EDIT: Я разработал проект в NetBeans. Когда я запускаю его там, он работает нормально. В этом случае путь к классам отличается. Он содержит оба ресурса URITestingProject
и ReadingResource
.
Однако, когда я запускаю его как автономный JAR, путь к классу содержит только URITestingProject
. Что странно для меня, так это то, что он не жалуется на то, что не найдет класс ReadingResource
. Это означает, что он загружен, хотя его нет в пути к классу:/
нет 'test_file.txt' в' URITesting.jar'. Вы имеете в виду ClassLibraryTest.jar? – Tobias
Да, я имею в виду ClassLibraryTest.jar. Метод 'ReadingResource.readResource()' должен искать файл 'test_file.txt' в своих собственных ресурсах, то есть в ClassLibraryTest.jar. – gicig