Почему этот модульный тест говорит, что мой каталог не существует, когда он существует? - PullRequest
0 голосов
/ 11 марта 2011

Этот код

URL listofFiles = this.getClass().getResource("someDir");
File f = new File(listofFiles.toString());
File[] files = f.listFiles();

выполняется в модульном тесте JUnit в среде веб-сервера Tomcat.

URL-адрес, который возвращен, наиболее определенно действителен. Я вошел в Finder в OS X, выполнил «Перейти в каталог», вставил значение listofFiles и увидел все мои файлы в каталоге.

Почему listFiles() возвращает ноль?

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Конструктор File со строкой ожидает путь, а не (toString of) URL.

Используйте другой конструктор, например new File(listofFiles.toURI()). Или дайте ему путь: new File(listofFiles.getPath()).

Обновление: или (как бы ужасно это не выглядело) попробуйте оба конструктора файлов , как подсказывает Java-гуру Кохсуке Кавагути.

Если бы у нас был конструктор File (URL) ...

1 голос
/ 11 марта 2011

Согласно Javadoc для File.listFiles():

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

Тот факт, что вы получаете возвращаемое значение null, указывает, что путь, который вы передаете в конструктор File, не указывает на каталог.

Я подозреваю, что передача результата URL.toString() в конструктор File создает путь, который отличается от того, что вы думаете. Вместо этого попробуйте что-то вроде

File f = new File(listofFiles.toURI());

Кроме того, вы можете записать значение f.getAbsolutePath(), чтобы убедиться, что читаемый путь совпадает с ожидаемым.

...