Поместите полный путь к файлу (D:\myDir\SomeTextFile.txt) в CLASSPATH и попробуйте то же самое в приведенных выше 3 строках кода.
Но, к сожалению, ни один из них не работает, и я всегда получаю null в свой InputStream in.
Переведено автоматически
Ответ 1
С каталогом в classpath из класса, загруженного тем же classloader, вы должны иметь возможность использовать любой из:
// From ClassLoader, all paths are "absolute" already - there's no context // from which they could be relative. Therefore you don't need a leading slash. InputStreamin=this.getClass().getClassLoader() .getResourceAsStream("SomeTextFile.txt"); // From Class, the path is relative to the package of the class unless // you include a leading slash, so if you don't want to use the current // package, include a slash like this: InputStreamin=this.getClass().getResourceAsStream("/SomeTextFile.txt");
Если они не работают, это говорит о том, что что-то еще не так.
И затем (используя разделитель путей в Unix, поскольку я нахожусь в Linux):
java -classpath code:txt dummy.Test
Результаты:
true true
Ответ 2
При использовании фреймворка Spring (либо как набора утилит, либо контейнера - вам не нужно использовать последнюю функциональность) вы можете легко использовать абстракцию ресурса.
Через интерфейс ресурса вы можете получить доступ к ресурсу как к входному потоку, URL, URI или файлу. Изменение типа ресурса, например, на ресурс файловой системы - это простой вопрос изменения экземпляра.
Ответ 3
Вот как я читаю все строки текстового файла в моем classpath, используя Java 7 NIO:
ПРИМЕЧАНИЕ: это пример того, как это можно сделать. Вам придется вносить улучшения по мере необходимости. Этот пример будет работать, только если файл действительно присутствует в вашем classpath, в противном случае будет вызвано исключение NullPointerException, когда getResource() возвращает null и для него вызывается .toURI() .
Кроме того, начиная с Java 7, одним из удобных способов указания наборов символов является использование констант, определенных в java.nio.charset.StandardCharsets (согласно их javadocs, они "гарантированно доступны в каждой реализации платформы Java".).
Следовательно, если вы знаете, что кодировка файла UTF-8, то явно укажите кодировку StandardCharsets.UTF_8
Ваши попытки не сработали, потому что только загрузчик классов для ваших классов может загружаться из classpath. Вы использовали загрузчик классов для самой системы Java.