- Формирование пути к файлу в Java
- File.separator
- Использование конструктора new File()
- Ручное указание разделителя каталогов
- Полезная информация
- Как указать путь к файлу в java
- Как построить путь к файлу в Java
- 1. File.separator
- 2. новый файл()
- 3. Ручной разделитель файлов
- Рекомендации
- Java указать адрес файла
- Работа с каталогами
- Работа с файлами
Формирование пути к файлу в Java
В данной статье мы рассмотрим три примера формирования пути к файлу в Java, используя при этом разные приемы:
- File.separator или System.getProperty(«file.separator») (Рекомендовано)
- File file = new File(workDir, filename) (Рекомендовано)
- Задание разделителя каталогов вручную (Не рекомендовано)
File.separator
Традиционный (и самый распространенный) способ формирования полного пути к файлу в мире Java — использование константы File.separator или вызов метода System.getProperty(«file.separator») . Оба этих способа приводят к одному результату — будет возвращен правильный разделитель каталогов в зависимости от операционной системы:
package ru.j4web.examples.java.io; import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; public class FilePathExample1 < private static final String filename = "newfile.txt"; private static final String workDir = System.getProperty("user.dir"); public static void main(String[] args) < try < //final String fullFilename = workDir // + System.getProperty("file.separator") + filename; final String fullFilename = workDir + File.separator + filename; final File file = new File(fullFilename); if (file.createNewFile()) < System.out.println("Файл создан: " + file.getAbsolutePath()); >else < System.out.println("Ошибка создания файла: " + file.getAbsolutePath()); >> catch (IOException ex) < Logger.getLogger(FilePathExample1.class.getName()) .log(Level.SEVERE, null, ex); >> >
Вывод данной программы будет примерно таким:
Файл создан: C:ProjectsJ4Web.RuSrcJavaIOFilePathExample1newfile.txt
Использование конструктора new File()
Для получения полного пути к файлу можно воспользоваться конструктором класса File с двумя аргументами: путь к файлу и имя файла. После этого у вновь созданного объекта мы можем вызвать метод getAbsolutePath() , который вернет полный путь к файлу.
package ru.j4web.examples.java.io; import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; public class FilePathExample2 < private static final String filename = "newfile.txt"; private static final String workDir = System.getProperty("user.dir"); public static void main(String[] args) < try < final File file = new File(workDir, filename); final String fullFilename = file.getAbsolutePath(); System.out.println("Полный путь к файлу: " + fullFilename); if(file.createNewFile()) < System.out.println("Файл создан."); >else < System.out.println("Не удалось создать файл."); >> catch (IOException ex) < Logger.getLogger(FilePathExample2.class.getName()) .log(Level.SEVERE, null, ex); >> >
Вывод программы будет примерно таким:
Полный путь к файлу: C:ProjectsJ4Web.RuSrcJavaIOFilePathExample2newfile.txt Файл создан.
Ручное указание разделителя каталогов
Исключительно в качестве развлечения для решения поставленной задачи можно использовать собственный алгоритм определения разделителя (очень не рекомендуется к применению):
package ru.j4web.examples.java.io; import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; public class FilePathExample3 < private static final String filename = "newfile.txt"; private static final String workDir = System.getProperty("user.dir"); public static void main(String[] args) < final String fullFilename = workDir + getSeparator() + filename; File file = new File(fullFilename); System.out.println("Полный путь к файлу: " + file.getAbsolutePath()); try < if(file.createNewFile()) < System.out.println("Файл создан."); >else < System.out.println("Не удалось создать файл."); >> catch (IOException ex) < Logger.getLogger(FilePathExample3.class.getName()) .log(Level.SEVERE, null, ex); >> private static String getSeparator() < final String currentOS = System.getProperty("os.name").toLowerCase(); if (currentOS.contains("win")) < // Текущая операционная система - Windows return "\"; >else if (currentOS.contains("nix") || currentOS.contains("nux") || currentOS.contains("mac")) < // Текущая операционная система - Linux, MacOS или "другой Unix" return "/"; >// Мы не знаем, какая операционная система используется - возвращаем // значение по умолчанию return "/"; > >
Вывод программы на операционной системе Windows будет примерно таким:
Полный путь к файлу: C:ProjectsJ4Web.RuSrcJavaIOFilePathExample3newfile.txt Файл создан.
Полезная информация
- Javadoc класса File
- Как получить текущий каталог в Java программе
- Как определить текущую операционную систему в Java программе
Как указать путь к файлу в java
Чтобы указать путь к файлу в Java , можно использовать класс java.io.File . Существует несколько способов задания пути:
File file = new File("/path/to/file.txt"); // Здесь /path/to/file.txt - абсолютный путь к файлу.
Относительный путь от текущего каталога:
File file = new File("file.txt"); // Здесь file.txt - файл, расположенный в текущем каталоге.
Относительный путь от корня проекта:
File file = new File("src/main/resources/file.txt");
Как построить путь к файлу в Java
В этом руководстве мы покажем вам три примера Java для построения пути к файлу:
- File.separator or System.getProperty(“file.separator”) (Recommended)
- Файл файл = новый файл (рабочий каталог, имя файла); (Рекомендуемые)
- Создайте разделитель файлов вручную. (Не рекомендую, просто для удовольствия)
1. File.separator
Классический пример Java для создания пути к файлу с использованием File.separator или System.getProperty(«file.separator») . Оба будут проверять ОС и правильно возвращать разделитель файлов, например,
package com.example.file; import java.io.File; import java.io.IOException; public class FilePathExample1 < public static void main(String[] args) < try < String filename = "newFile.txt"; String workingDirectory = System.getProperty("user.dir"); //****************// String absoluteFilePath = ""; //absoluteFilePath = workingDirectory + System.getProperty("file.separator") + filename; absoluteFilePath = workingDirectory + File.separator + filename; System.out.println("Final filepath : " + absoluteFilePath); //****************// File file = new File(absoluteFilePath); if (file.createNewFile()) < System.out.println("File is created!"); >else < System.out.println("File is already existed!"); >> catch (IOException e) < e.printStackTrace(); >> >
Final filepath : /Users/example/Documents/workspace/maven/fileUtils/newFile.txt File is created!
2. новый файл()
Некоторые разработчики используют API new File() для построения пути к файлу.
package com.example.file; import java.io.File; import java.io.IOException; public class FilePathExample2 < public static void main(String[] args) < try < String filename = "newFile.txt"; String workingDirectory = System.getProperty("user.dir"); //****************// File file = new File(workingDirectory, filename); //****************// System.out.println("Final filepath : " + file.getAbsolutePath()); if (file.createNewFile()) < System.out.println("File is created!"); >else < System.out.println("File is already existed!"); >> catch (IOException e) < e.printStackTrace(); >> >
Final filepath : /Users/example/Documents/workspace/maven/fileUtils/newFile.txt File is created!
3. Ручной разделитель файлов
Проверьте системную ОС и создайте путь к файлу вручную, просто для удовольствия, не рекомендую.
package com.example.file; import java.io.File; import java.io.IOException; public class FilePathExample3 < public static void main(String[] args) < try < String filename = "testing.txt"; String workingDir = System.getProperty("user.dir"); String absoluteFilePath = ""; //****************// String your_os = System.getProperty("os.name").toLowerCase(); if (your_os.indexOf("win") >= 0) < //if windows absoluteFilePath = workingDir + "\\" + filename; >else if (your_os.indexOf("nix") >= 0 || your_os.indexOf("nux") >= 0 || your_os.indexOf("mac") >= 0) < //if unix or mac absoluteFilePath = workingDir + "/" + filename; >else < //unknow os? absoluteFilePath = workingDir + "/" + filename; >System.out.println("Final filepath : " + absoluteFilePath); //****************// File file = new File(absoluteFilePath); if (file.createNewFile()) < System.out.println("Done"); >else < System.out.println("File already exists!"); >> catch (IOException e) < e.printStackTrace(); >> >
Final filepath : /Users/example/Documents/workspace/maven/fileUtils/newFile.txt File is created!
Рекомендации
Java указать адрес файла
Класс File, определенный в пакете java.io, не работает напрямую с потоками. Его задачей является управление информацией о файлах и каталогах. Хотя на уровне операционной системы файлы и каталоги отличаются, но в Java они описываются одним классом File.
В зависимости от того, что должен представлять объект File — файл или каталог, мы можем использовать один из конструкторов для создания объекта:
File(String путь_к_каталогу) File(String путь_к_каталогу, String имя_файла) File(File каталог, String имя_файла)
// создаем объект File для каталога File dir1 = new File("C://SomeDir"); // создаем объекты для файлов, которые находятся в каталоге File file1 = new File("C://SomeDir", "Hello.txt"); File file2 = new File(dir1, "Hello2.txt");
Класс File имеет ряд методов, которые позволяют управлять файлами и каталогами. Рассмотрим некоторые из них:
- boolean createNewFile() : создает новый файл по пути, который передан в конструктор. В случае удачного создания возвращает true, иначе false
- boolean delete() : удаляет каталог или файл по пути, который передан в конструктор. При удачном удалении возвращает true.
- boolean exists() : проверяет, существует ли по указанному в конструкторе пути файл или каталог. И если файл или каталог существует, то возвращает true, иначе возвращает false
- String getAbsolutePath() : возвращает абсолютный путь для пути, переданного в конструктор объекта
- String getName() : возвращает краткое имя файла или каталога
- String getParent() : возвращает имя родительского каталога
- boolean isDirectory() : возвращает значение true, если по указанному пути располагается каталог
- boolean isFile() : возвращает значение true, если по указанному пути находится файл
- boolean isHidden() : возвращает значение true, если каталог или файл являются скрытыми
- long length() : возвращает размер файла в байтах
- long lastModified() : возвращает время последнего изменения файла или каталога. Значение представляет количество миллисекунд, прошедших с начала эпохи Unix
- String[] list() : возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге
- File[] listFiles() : возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге
- boolean mkdir() : создает новый каталог и при удачном создании возвращает значение true
- boolean renameTo(File dest) : переименовывает файл или каталог
Работа с каталогами
Если объект File представляет каталог, то его метод isDirectory() возвращает true . И поэтому мы можем получить его содержимое — вложенные подкаталоги и файлы с помощью методов list() и listFiles() . Получим все подкаталоги и файлы в определенном каталоге:
import java.io.File; public class Program < public static void main(String[] args) < // определяем объект для каталога File dir = new File("C://SomeDir"); // если объект представляет каталог if(dir.isDirectory()) < // получаем все вложенные объекты в каталоге for(File item : dir.listFiles())< if(item.isDirectory())< System.out.println(item.getName() + " \t folder"); >else < System.out.println(item.getName() + "\t file"); >> > > >
Теперь выполним еще ряд операций с каталогами, как удаление, переименование и создание:
import java.io.File; public class Program < public static void main(String[] args) < // определяем объект для каталога File dir = new File("C://SomeDir//NewDir"); boolean created = dir.mkdir(); if(created) System.out.println("Folder has been created"); // переименуем каталог File newDir = new File("C://SomeDir//NewDirRenamed"); dir.renameTo(newDir); // удалим каталог boolean deleted = newDir.delete(); if(deleted) System.out.println("Folder has been deleted"); >>
Работа с файлами
Работа с файлами аналогична работе с каталога. Например, получим данные по одному из файлов и создадим еще один файл:
import java.io.File; import java.io.IOException; public class Program < public static void main(String[] args) < // определяем объект для каталога File myFile = new File("C://SomeDir//notes.txt"); System.out.println("File name: " + myFile.getName()); System.out.println("Parent folder: " + myFile.getParent()); if(myFile.exists()) System.out.println("File exists"); else System.out.println("File not found"); System.out.println("File size: " + myFile.length()); if(myFile.canRead()) System.out.println("File can be read"); else System.out.println("File can not be read"); if(myFile.canWrite()) System.out.println("File can be written"); else System.out.println("File can not be written"); // создадим новый файл File newFile = new File("C://SomeDir//MyFile"); try < boolean created = newFile.createNewFile(); if(created) System.out.println("File has been created"); >catch(IOException ex) < System.out.println(ex.getMessage()); >> >
При создании нового файла метод createNewFile() в случае неудачи выбрасывает исключение IOException , поэтому нам надо его отлавливать, например, в блоке try. catch, как делается в примере выше.