2014-01-14 4 views
0

Я прочитал каждый вопрос и ответ по этому вопросу, и я пробовал множество предлагаемых решений, ни один из которых не работает, в настоящее время я пытаюсь использовать ресурс URL метод, но url всегда возвращает null. Вот моя текущая настройка псевдо:Попытка прочитать файл ресурсов из jar

/src/java/pkg/name/is/long/meatpackage/MyClassFile.java

/SRC/Java/упак/имя/есть/длинный/meatpackage/MyResources/myresourcefile.txt

@SuppressWarnings("rawtypes") 
Class thisClass = Class.forName("pkg.name.is.long.meatpackage.MyClassFile"); 
ClassLoader cLoader = thisClass.getClassLoader(); 
//note, I have tried a plethora of variations to the path for the file, this is just one example 
URL url = cLoader.getResource("pkg/name/is/long/meatpackage/myresources/myresourcefile.txt"); 
System.out.println("Found the file!!: " + url); 

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

Когда я перечисляю банку, это показывает, что файл находится в pkg/name/is/log/meatpackage/myresources/myresourcefile.txt.

Другой подход я попытался это:

//along with multiple path combinations for the file the InputStream is always null.  
//multiple paths include but are not limited to: 
// "pkg/name/is/long/meatpackage/myresources/myresourcefile.txt" 
// "/pkg/name/is/long/meatpackage/myresources/myresourcefile.txt" 
// "/myresources/myresourcefile.txt" 
// "/myresourcefile.txt" 
// "myresourcefile.txt" 
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("myresourcefile.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

ответ

0

Вы можете упростить это с помощью GetClass() getResourceAsStream() или MyClassFile.getResourceAsStream() - вам не нужно говорить с загрузчиком классов непосредственно..

Обратите внимание, что имя ресурса разделено на косые черты, и если вы укажете /, то это из корня JAR или из базы пути класса, иначе это неявно из того же каталога пакетов, что и класс.

Например:

пакет com.example; public class Foo { static { Foo.class.getResourceAsStream ("bar.txt"); // ищет /com/example/bar.txt Foo.class.getResourceAsStream ("/ bar.txt"); // ищет /bar.txt }}

Если вы разрабатываете в Eclipse, обратите внимание, что getResourceAsStream выглядит только внутри скомпилированного выходной каталог (то есть все, что находится в bin). Поэтому, если у вас есть свой ресурс вне его, скопируйте его в каталог src (поэтому он будет скопирован в каталог bin во время сборки), и он должен найти его правильно.

+0

Итак, метод, в котором это вызвано, должен быть статическим? Я пробовал это до публикации, потому что это одно из предложений по аналогичному вопросу, но просто чтобы убедиться, что я попробовал его еще несколько минут назад. Ни один из методов getResourceAsStream не возвращает значение InputStream. Опять же, когда я перечисляю содержимое jar, файл есть, и я попытался поместить файл в почти каждое место, о котором вы можете думать. Хотя действительно целесообразно поместить его в каталог ресурсов в том же пакете с классом, я попытался переместить его в структуру каталогов, ничего не работает. – JoGotta

+0

Static не имеет значения. Я изменил метод на static и использовал MyClassFile.class.getResourceAsStream безрезультатно. Я готов отказаться. – JoGotta

+0

Нет, это не обязательно быть статичным. Убедитесь, что ваш файл находится в скомпилированном выходном каталоге и убедитесь, что ссылка на файл начинается с/если вы хотите разместить полный пакет. – AlBlue

Смежные вопросы