1. Введение
JavaВ процессе разработки нам часто требуется получить путь к файлу, например, для чтения файла конфигурации и т.д. Сегодня мы кратко обсудим путь к файлу и как его прочитать.
2. Путь к файлу
Путь к файлу обычноотносительный путьиабсолютный путь.
2.1 Относительные пути
В зависимости от текущего файла каталог первого уровня указывает на указанный файл ресурсов. В коде Java позиция текущего выполняемого кода используется в качестве эталонной позиции, пока позиция ссылочного файла относительно ссылочного файла остается неизменной, ее можно прочитать. Как только относительное положение изменено, оно не может быть прочитано.
2.2 Абсолютный путь
Путь, по которому файл фактически существует в файловой системе, относится к корневому каталогу жесткого диска (WindowsНачните с буквы диска) и выполните поуровневый каталог, указывающий на файл (чтение и запись из корневого каталога уровень за уровнем). Абсолютный путь, как следует из названия, является абсолютным адресом, точно так же, как вам просто нужно сообщить кому-то номер своего дома, и он сможет найти ваш дом. Вместо относительного положения вы сказали ему быть по соседству с домом старого Ванга.
2.3 Сокращение пути
Мы часто видим, что некоторые пути к каталогам файлов сокращены некоторыми символами, здесь необходимо обобщить (с классомUnixсистема в качестве примера):
идентификатор | инструкция |
---|---|
../ | Указывает каталог над каталогом, в котором находится текущий файл. |
./ | Указывает каталог, в котором находится текущий файл |
/ | Указывает корневой каталог |
~ | текущий каталог пользователя,macНиже/Users/username ,иwin10Ниже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获取更多资讯