2014-02-19 4 views
2

Я пытаюсь прочитать текстовый файл, который у меня есть в папке ресурсов для тестирования. Я пробовал по крайней мере 3 различных реализаций, которые корректно работают на Windows, но все они не работают в Linux.Не удалось загрузить текстовый файл из ресурсов на linux

Текущий проект выглядит

/src/test/java 
    /com/my/app/util/Class_needs_text.java 
/src/test/resources 
    /com/my/app/util/text_file.txt 

Class_needs_text.java

... 
private static final String LOADTHIS = "/com/my/app/util/text_file.txt"; 
private static final String LOADTHAT = "text_file.txt"; 
// both of these work on windows, but not linux 
java.net.URL url = Class_needs_text.class.getResource(LOADTHIS); 
java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI()); 
fileContents = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8"); 

Я проверил Linux и текстовый файл копируется в каталог как в папку класса на сборке. (./src/test/resources/com/my/app/util/text_file.txt к ./target/test-classes/com/my/app/util/text_file.txt)

Извините, если это было путь слишком многословный. Скалы: Мне нужно прочитать содержимое папки с файлами, находящейся в папке с ресурсами, в обоих окнах и в Linux.

+0

вы используете Eclipse? Если вы запускаете программу из Eclipse, также убедитесь, что/src/test/resources настроен как исходная папка. –

+0

Я бегу от Maven. Я посмотрю, будут ли какие-либо из моих настроек maven разными версиями windows vs linux. – Rick

+0

Посмотрите, можете ли вы читать с помощью Class_needs_text.classgetResourceAsStream() –

ответ

0

Когда getResource() вызывается в классе, класс будет делегировать этот вызов его загрузчику классов, я не уверен, есть ли разница между unix и windows JVM. Не следует различать ОС, потому что загрузчик классов, который является классом загрузки, должен иметь такую ​​же видимость для ресурса.

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

Class_needs_text.class.getClassLoader().getResource(LOADTHIS); 

Если вы в не статический метод

this.getClass().getResource(LOADTHIS); 
+0

Это статический метод. Я пробовал это раньше. В окнах это не работает ни для одного из следующих: /com/my/app/util/text_file.txt, text_file.txt или /text_file.txt. Должен ли я использовать что-то еще? – Rick

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