2015-04-30 11 views
0

Я не знаю, что не так, но я получаю noSuchFileException. Правильный путь. Я могу получить к нему доступ, хотя cmd.Не удается прочитать файл с использованием относительного пути

Path file = Paths.get("../resources/input.txt"); 
      BufferedReader reader = Files.newBufferedReader(file, Charset.defaultCharset());  
+2

Не должно быть 1 точка? Если вы не имеете в виду родительский каталог текущего каталога? Можете ли вы включить полный путь, а также путь к текущему рабочему каталогу? – initramfs

+0

вы спаситель жизни. Спасибо :) –

+0

Двойная точка переместится в одну папку обратно в текущую директорию, где одна точка относится к текущему рабочему каталогу –

ответ

0

Просто формализовать:

Представьте структуру каталогов: /foo/bar/example/test/file.txt

и рабочий каталог /foo/bar/example/

и имя пользователя из bob


. (точка) - Относится к текущему рабочему каталогу (например, /foo/bar/example/ в этом случае).

.. (dot dot) - Относится к родительскому каталогу (например, /foo/bar/ в этом случае).

~ (тильда) [Unix-подобная только/оболочка только] - Относится к домашней директории пользователя (например, /home/bob/)

Непосредственно начиная имя каталога без предшествующих косой черты (например test/file.txt) является эквивалент для использования одной точки (т.е. пути разрешены относительно текущего рабочего каталога).

Непосредственно начиная имя каталога с предшествующей косой чертой (например, /test/file.txt), и вы теперь указать абсолютный путь (на Unix) от корня (или, в случае Windows, от привода рабочего каталог проживает в).


Особый случай существует где. (точка) и .. (точка точка) относятся к тому же каталогу, , если и только если, текущий рабочий каталог находится в корне / («абсолютный» корень или тюрьма chroot в любом случае). Эквивалент в окнах имеет корень диска (например, C:\).

+0

Обратите внимание, что тильда действительна только в оболочке; вы не можете использовать это в «Путь»! – fge

+0

@fge Упс, забыли об этом. Исправлена. – initramfs

+0

Следует, наверное, отметить, что это зависит от системы, и это описывает семантику файловой системы Unix. В Windows пути, начинающиеся с '/' или '\\', являются относительными и разрешены относительно текущей буквы диска. –

2

Судя по имени файла, вы пытаетесь прочитать ресурс. Ресурс не является файлом. Он, по крайней мере, концептуально упакован внутри файла JAR или WAR или EAR. Вы должны использовать Class.getResource() и друзей. В этом случае возможно getResourceAsStream() - это то, что вам нужно, без ...

0

Может быть, вы можете попытаться проверить путь, занятую BufferedReader через file.toAbsolutePath().normalize(), чтобы увидеть результат путь без избыточных элементов

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