2016-11-01 3 views
2

Может ли кто-нибудь сказать мне, где Paths.get("") указывает на?Java nio. Пустая трасса

Вот код и вывод.

public static void main(String[] args) { 
    Path path = Paths.get(""); 
    System.out.printf("`%s`%n", path); 
    System.out.printf("`%s`%n", path.normalize()); 
    System.out.println(Files.exists(path)); 
    System.out.println(Files.isExecutable(path)); 
} 

`` 
`` 
true 
true 

ответ

2
System.out.println(Paths.get("").toAbsolutePath()); 

/Users/андрей/рабочее пространство/поцарапать

Похоже, это текущий рабочий каталог. На моей машине Java сообщает, что она является исполняемой, потому что флаг «x» в каталоге соответствует текущему пользователю.

От javadocs:

Этот метод проверяет, что файл существует и что эта виртуальная машина Java имеет соответствующие привилегии для выполнения файла. При проверке доступа к каталогу семантика может отличаться. Например, в системах UNIX проверка наличия доступа проверяет, имеет ли виртуальная машина Java разрешение на поиск в каталоге для доступа к файлу или подкаталогам.

3

Он отображается в каталоге, из которого вы запускаете свою программу. Преобразуйте его в абсолютный путь, чтобы проверить себя. System.out.println(Paths.get("").toAbsolutePath());

+0

Но почему это исполняемый файл? – antonpp

+3

«Он сопоставляется с корневым каталогом вашей программы» - нет, это текущий каталог по умолчанию, из которого вы его запускаете. Попробуйте войти в каталог A, пока программа находится в каталоге B, и введите java -cp B MyClass. Он напечатает A, а не B. –

+0

Да, вы правы. – benehsv

0

В документации сказано, что имеет связь с существующей файловой системы:

используя это будет означать предполагаемую ссылку на FileSystem по умолчанию и ограничивают полезность вызывающего кода

Вы можете с небольшим обновлением:

public static void main(String[] args) { 
     Path path = Paths.get(""); 

     System.out.printf("`%s`%n", path); 
     System.out.printf("`%s`%n", path.normalize()); 
     System.out.println(Files.exists(path)); 
     System.out.println(Files.isExecutable(path)); 

     System.out.println(path.toFile().getAbsolutePath()); 
    } 

Последний выход примерно такой:

C: \ Users \ Назар \ Проекты \ IdeaProjects \ тест-проект