2013-05-20 2 views
0
URL root = Thread.currentThread().getContextClassLoader().getResource(packageName.replace(".", "/")); 

Я использую вышеуказанный оператор для доступа к файлам .class с указанием имени пакета. Но в некоторых случаях мне нужно получить доступ к файлам с \ build \ test \ classes вместо \ build \ classes. Как изменить приведенный выше оператор?Доступ к другой папке с использованием classloader

+1

вам нужно изменить свой путь к среде выполнения, чтобы включить тестовые ресурсы, код Java остается тем же самым – hoaz

+0

Я хотел бы сделать это в коде, поскольку оба случая возможны. – cooltoad

+0

загрузчик классов не может загрузить то, что не находится в его пути к классам. –

ответ

1

У вас возникли проблемы с вашим путом классов. ${project}/build/test/classes и ${project}/build/classes папки предполагают, что вы либо использовали Ant для компиляции кода, либо отметили «Разрешить выходные папки для исходных папок». вариант в диалоговом окне «Новый Java-проект Eclipse».

Вы должны настроить проект для компиляции всех исходных файлов в одну и ту же папку вывода, в вашем случае /build/classes.

Если вы используете загрузчик классов для загрузки ресурса, то путь, который вы ему даете , не является абсолютным для всей файловой системы, даже если он начинается с /.

InputStream is = this.getClass().getResourceAsStream("/some/resource"); 

Это на самом деле означает найти этот файл ${project}/build/classes/some/resource. И для того, чтобы получить этот ресурс в целевом местоположении, самый простой способ - разместить его в ${project}/src/some/resource.

Хотя вы должны использовать Maven и m2eclipse, если используете Eclipse.