На этом шаге мы рассмотрим модифицирующие функции для работы с файлами и директориями
Кроме проверки наличия, а также получения атрибутов рассматриваемых объектов в классе Files есть модифицирующие функции для работы с файлами и директориями. Данные функции можно разбить на 4 группы:
Рассмотрим каждую группу.
Функции для создания директорий следующие:
Следующая группа это функции для создания файлов:
Третья группа модицирующих функций это функции для удаления файла или пустой директории:
Последняя группа функций это функции для копирования и перемещения файла или пустой директории.
Приведем ниже примеры программ, использующие рассмотренные выше функции.
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Main { /*Задаем количество создаваемых файлов*/ public static final int N = 4; /** * Функция для вывода списка файлов в заданной директории * @param dir Путь до директории * */ private static void printFilesList(Path dir) { System.out.println(); System.out.println("Список файлов в папке " + dir + ": "); File[] filesList = dir.toFile().listFiles(); if (filesList.length == 0) { System.out.println("\tПапка пуста"); } else { for (File file : filesList) { System.out.println("\t" + file); } } System.out.println(); } public static void main(String[] args) throws IOException { /*Будем создавать временную папку в текущей директории*/ Path rootDir = Paths.get(""); /*Создаем временную папку*/ Path dir = Files.createTempDirectory(rootDir, "tmp"); System.out.println("Папка " + dir + " создана"); /*Создаем N файлов во временной папке*/ Path[] files = new Path[N]; for (int i = 0; i < N; i++) { files[i] = Files.createTempFile(dir, "tmp", ".txt"); System.out.println("\tФайл " + files[i] + " создан"); } /*Выводим список файлов во временной папке*/ printFilesList(dir); System.out.println("Удаление файлов..."); /*Удаляем файлы из временной папки*/ for (int i = 0; i < N; i++) { Files.deleteIfExists(files[i]); } /*Выводим список файлов во временной папке*/ printFilesList(dir); /*Удаляем временную папку*/ System.out.println("Удаление временной папки..."); Files.deleteIfExists(dir); } }
Проект можно взять здесь
Рис. 1. Вывод программы
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Main { /*Задаем количество создаваемых файлов*/ public static final int N = 4; /** * Данная функция создает временную папку в заданной директории и с заданным * префиксом имени. Возвращает объект, ссылающийся на созданную папку. * * @param root Папка, в которой будет создавать временная папка * @param prefix Префикс для имени папки * @return Объект, ссылающийся на созданную папку. */ private static Path createTmpDir(Path root, String prefix) throws IOException { Path dir = Files.createTempDirectory(root, prefix); System.out.println("Временная папка " + dir + " создана"); return dir; } /** * Функция для удаления временной папки * * @param dir Путь до папки */ private static void deleteTmpDir(Path dir) throws IOException { System.out.println("Удаление папки " + dir); Files.deleteIfExists(dir); } /** * Данная функция создает временные файлы в заданной директории. * Возвращает массив созданных файлов. * * @param root Папка, в которой будет создавать временная папка * @param count Количество создаваемых файлов * @return Массив путей созданных файлов. */ private static Path[] createTmpFiles(Path root, int count) throws IOException { Path[] files = new Path[count]; System.out.println("Создание файлов в папке " + root); for (int i = 0; i < count; i++) { files[i] = Files.createTempFile(root, "tmp", ".txt"); System.out.println("\tФайл " + files[i] + " создан"); } System.out.println(); return files; } /** * Функция для удаления временных файлов */ private static void deleteTmpFiles(Path[] files) throws IOException { System.out.println("Удаление файлов из папки " + files[0].getParent().getFileName()); for (Path file : files) { Files.deleteIfExists(file); System.out.println("\tФайл " + file + " удален"); } System.out.println(); } /** * Функция для копирования некоторых файлов, начиная с позиции begin, и * заканчивая позицией end - 1 в папку to. * Возвращает массив путей скопированных файлов. * * @param files Массив файлов, которые нужно скопировать * @param begin Начальная позиция, с которой нужно копировать файлы * @param end Конечная позиция (не включается), до которой нужно копировать * файлы * @param to Путь до папки, в которую будут копироваться файлы * @return Возвращает массив путей скопированных файлов */ private static Path[] copyFiles(Path[] files, int begin, int end, Path to) throws IOException { Path[] newFiles = new Path[end - begin]; System.out.println("Копирование файлов [" + begin + "; " + (end - 1) + "] из папки " + files[begin].getParent() + " в папку " + to); for (int i = begin; i < end; i++) { newFiles[i - begin] = Paths.get(to.toString() + "/" + files[i].getFileName()); Files.copy(files[i], newFiles[i - begin]); System.out.println("\tФайл " + files[i].getFileName() + " скопирован"); } System.out.println(); return newFiles; } /** * Функция для перемещения некоторых файлов, начиная с позиции begin, и * заканчивая позицией end - 1 в папку to. * Возвращает массив путей файлов, которые были перемещены. * * @param files Массив файлов, которые нужно переместить * @param begin Начальная позиция, с которой нужно переместить файлы * @param end Конечная позиция (не включается), до которой нужно переместить * файлы * @param to Путь до папки, в которую будут перемещаться файлы * @return Возвращает массив путей файлов, которые были перемещены. */ private static Path[] moveFiles(Path[] files, int begin, int end, Path to) throws IOException { Path[] newFiles = new Path[end - begin]; System.out.println("Перемещение файлов [" + begin + "; " + (end - 1) + "] из папки " + files[begin].getParent() + " в папку " + to); for (int i = begin; i < end; i++) { newFiles[i - begin] = Paths.get(to.toString() + "/" + files[i].getFileName()); Files.move(files[i], newFiles[i - begin]); System.out.println("\tФайл " + files[i].getFileName() + " перемещен"); } System.out.println(); return newFiles; } /** * Функция для вывода списка файлов в заданной директории * * @param dir Путь до директории */ private static void printFilesList(Path dir) { System.out.println("Список файлов в папке " + dir + ": "); File[] filesList = dir.toFile().listFiles(); if (filesList.length == 0) { System.out.println("\tПапка пуста"); } else { for (File file : filesList) { System.out.println("\t" + file); } } System.out.println(); } public static void main(String[] args) throws IOException { Path rootDir = Paths.get(""); /*Создаем временные папки*/ Path dir = createTmpDir(rootDir, "tmp"); Path copyDir = createTmpDir(rootDir, "copy_tmp"); Path moveDir = createTmpDir(rootDir, "move_tmp"); System.out.println(); /*Создаем временные файлы в первой папке*/ Path[] files = createTmpFiles(dir, N); /*Копируем первую половину файлов из первой папки во вторую*/ Path[] copyFiles = copyFiles(files, 0, N / 2, copyDir); printFilesList(copyDir); /*Перемещаем вторую половину файлов из первой папки в третью папку*/ Path[] moveFiles = moveFiles(files, N / 2, N, moveDir); printFilesList(moveDir); /*Удаляем все созданные временные файлы*/ deleteTmpFiles(files); deleteTmpFiles(copyFiles); deleteTmpFiles(moveFiles); /*Удаляем все созданные временные папки*/ deleteTmpDir(dir); deleteTmpDir(copyDir); deleteTmpDir(moveDir); } }
Проект можно взять здесь
Рис. 2. Вывод программы
На следующем шаге мы продолжим изучение класса Files