java получить путь к файлу

Spring Boot Java

1. Введение

JavaВ процессе разработки нам часто требуется получить путь к файлу, например, для чтения файла конфигурации и т.д. Сегодня мы кратко обсудим путь к файлу и как его прочитать.

2. Путь к файлу

Путь к файлу обычноотносительный путьиабсолютный путь.

2.1 Относительные пути

В зависимости от текущего файла каталог первого уровня указывает на указанный файл ресурсов. В коде Java позиция текущего выполняемого кода используется в качестве эталонной позиции, пока позиция ссылочного файла относительно ссылочного файла остается неизменной, ее можно прочитать. Как только относительное положение изменено, оно не может быть прочитано.

2.2 Абсолютный путь

Путь, по которому файл фактически существует в файловой системе, относится к корневому каталогу жесткого диска (WindowsНачните с буквы диска) и выполните поуровневый каталог, указывающий на файл (чтение и запись из корневого каталога уровень за уровнем). Абсолютный путь, как следует из названия, является абсолютным адресом, точно так же, как вам просто нужно сообщить кому-то номер своего дома, и он сможет найти ваш дом. Вместо относительного положения вы сказали ему быть по соседству с домом старого Ванга.

2.3 Сокращение пути

Мы часто видим, что некоторые пути к каталогам файлов сокращены некоторыми символами, здесь необходимо обобщить (с классомUnixсистема в качестве примера):

идентификатор инструкция
../ Указывает каталог над каталогом, в котором находится текущий файл.
./ Указывает каталог, в котором находится текущий файл
/ Указывает корневой каталог
~ текущий каталог пользователя,macНиже/Users/usernamewin10Нижеc:\users\username

WindowsОсновным будет/изменить на\Вот и все.

3. Прочитать файл в Java

Давайте сначала объявим тестовый путь:

foo
|_src
| |_Test.java
| |_app.yml

вTest.javaпривык писать читатьapp.ymlфайловая логика.Javaпрошедшийjava.io.Fileдля выполнения файловых операций. Для получения пути к файлу предусмотрены следующие три метода.

3.1 getPath

Этот метод возвращает строковую форму абстрактного пути к файлу. На самом деле это путь, переданный конструктору File.

Следовательно, еслиFileОбъект был создан с относительным путем, возвращаемое значение также будет относительным путем. Возвращает абсолютный путь, если это абсолютный путь.

 File file = new File("./app.yml");
 # 输出 path = ./app.yml
 System.out.println("path = " + file.getPath());

 # 如果为绝对路径
 File file = new File("/Users/dax/IdeaProjects/foo/src/app.yml");
 # 输出 path = path = /Users/dax/IdeaProjects/foo/src/app.yml
 System.out.println("path = " + file.getPath());    

3.2 getAbsolutePath

Этот метод возвращает абсолютный путь к файлу. **Пожалуйста, обрати внимание! Здесь большая дыра. **Если ваш файл находится вJavaВ проекте путь рассчитывается по скомпилированному пути.

File file = new File("./app.yml");
# absolutePath = /Users/dax/IdeaProjects/foo/./app.yml
System.out.println("absolutePath = " + absolutePath);

В то же время мы обнаружили, что этот метод анализирует только относительный путь текущего каталога (каталога, в котором находится приведенный выше код), если путь в инициализации содержит2.3 Разделсерединастенография,стенографияне будет разобран.

Из-за существования сокращения файл хранится в файловой системеабсолютный путьИх может быть много.

3.3 getCanonicalPath

стенографияОтсутствие парсинга иногда является проблемой, и нам может понадобиться знать конкретный путь.getCanonicalPath()метод решает эту проблему.

File file = new File("./app.yml");
# canonicalPath = /Users/dax/IdeaProjects/foo/app.yml
System.out.println("canonicalPath = " + file.getCanonicalPath());

так какgetCanonicalPath()Чтение — это файловая система, поэтому оно снижает производительность. Если мы уверены, что не используется сокращение и регистр буквы диска нормализован (при использованииWindows OS), мы должны предпочесть использоватьgetAbsoultePath(), если ваш проект не должен использоватьgetCanonicalPath().

Канонические пути (без сокращенных символов) уникальны для файла в фиксированном местоположении.

关注公众号:Felordcn获取更多资讯

Личный блог: https://felord.cn