getPath() и пробелы в Java

#java #file

#java #файл

Вопрос:

Недавно я столкнулся с проблемой с getPath().

мой код выглядит примерно так:

 File path = new File(Main.class.getResource("/worlds/").getPath());
File[] files = path.listFiles();
  

Проблема сейчас в том, что если где-то в пути к основному классу есть пробел path.listFiles() , он вернется null . Если пробела нет, все работает нормально.

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

Ответ №1:

это неправильный способ преобразования URL-адреса в файл. попробуйте это вместо:

 new File(Main.class.getResource("/worlds/").toURI());
  

Ответ №2:

Не делайте этого. URL-адрес ресурса, возвращаемый getResource(), не обязательно является файлом в файловой системе, который представляет File .

Комментарии:

1. Может быть, но я не вижу лучшего способа прочитать содержимое каталога относительно пути, по которому выполняется программа

2. new File("./worlds").listFiles()

3. @MasterCassim: Я хотел бы увидеть доказательства этого. Ошибка, описанная в вопросе, связана с неправильным декодированием URL-адреса и попыткой использовать его в качестве пути к файлу. В моем предложении не используется URL-адрес, так как же это может вызвать ту же ошибку?

4. @Simiil в этом нет «может быть», это факт, и тот факт, что вы не видите лучшего способа, его не меняет.

5. Код: System.out.println(«Используя новый файл (./worlds)!»); path = новый файл («./worlds»); System.out.println(«Path = » path); File[] files = path.listFiles(); System.out.println(«Files = » files); Вывод: с использованием нового файла (./worlds)! Путь = .worlds Files = null