Статьи

Управление файлами в Java 7

Ниже приведен модифицированный фрагмент из проекта The Well-Gounded Java Developer . Это дает вам быстрый пример того, насколько проще манипулировать файлами в Java 7, чем в предыдущих версиях. Используя новый класс Files и его многочисленные служебные методы, вы можете выполнять следующие операции над файлами, используя только одну строку кода:

  • Создайте
  • Удалить
  • копия
  • Переместить / Переименовать

СОВЕТ Краткая заметка о Path . В этом посте предполагается, что вы немного знакомы с новым классом Java 7 Path , если нет, то это краткое введение! Путь — это логическая абстракция местоположения в файловой системе, например, « c: \» — это Путь как «../foobar.txt».

Давайте начнем с рассмотрения создания и удаления файлов.

Создание и удаление файлов

Используя простые вспомогательные методы в классе Files, вы можете создавать и легко удалять файлы.

СОВЕТ Если вы используете фрагменты кода в этом разделе, замените фактические пути на те, которые соответствуют вашей файловой системе!

В следующем фрагменте кода показано базовое создание файла с использованием метода Files.createFile (Path target) .

1
2
Path target = Paths.get("D:\\Backup\\MyStuff.txt");
Path file = Files.createFile(target);

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

Например, PosixFilePermission и PosixFilePermissions для POSIX-совместимой файловой системы. Ниже приведен пример настройки чтения / записи для владельца-группы-все в файловой системе POSIX.

1
2
3
4
5
6
Path target = Paths.get("D:\\Backup\\MyStuff.txt");
Set<PosixFilePermission> perms
= PosixFilePermissions.fromString("rw-rw-rw-");
FileAttribute<Set<PosixFilePermission>> attr
= PosixFilePermissions.asFileAttribute(perms);
Files.createFile(target, attr);

Пакет java.nio.file.attribute содержит список предоставляемых классов FilePermission . Поддержка атрибутов файлов также более подробно рассматривается в главе 2 The Well-Gounded Java Developer .

ПРЕДУПРЕЖДЕНИЕ. При создании файлов с определенными разрешениями следует помнить о любых ограничениях umask или ограничениях, которые применяются родительским каталогом этого файла. Например, вы можете обнаружить, что, хотя вы указываете rw-rw-rw для своего нового файла, он фактически создается как rw-r – r– из-за этих ограничений.

Удаление файла немного проще и выполняется простым методом Files.delete (Path) .

1
2
Path target = Paths.get("D:\\Backup\\MyStuff.txt");
Files.delete(target);

Далее краткий обзор по копированию и перемещению файлов в файловой системе.

Копирование и перемещение файлов

Используя простые вспомогательные методы в классе Files, вы можете легко выполнять операции копирования и перемещения. В следующем фрагменте кода демонстрируется базовая копия с использованием метода Files.copy (Path source, Path target) .

1
2
3
Path source = Paths.get("C:\\My Documents\\Stuff.txt");
Path target = Paths.get("D:\\Backup\\MyStuff.txt");
Files.copy(source, target);

Чаще всего вы хотите указать некоторые параметры с операцией копирования. В Java 7 вы можете использовать перечисление StandardCopyOption для указания этих опций. В следующем примере используется опция перезаписи (то есть замены существующей).

1
2
3
4
5
import static java.nio.file.StandardCopyOption.*;
 
Path source = Paths.get("C:\\My Documents\\Stuff.txt");
Path target = Paths.get("D:\\Backup\\MyStuff.txt");
Files.copy(source, target, REPLACE_EXISTING);

Другие параметры копирования включают COPY_ATTRIBUTES (копирует атрибуты файла) и ATOMIC_MOVE (обеспечивает успешное выполнение обеих сторон операции перемещения или откат операции). Операция перемещения очень похожа на операцию копирования и выполняется с использованием атомарных файлов. Метод перемещения (источник пути, цель пути) .

Опять же, вы обычно хотите, чтобы некоторые параметры копирования сопровождали это перемещение, поэтому вы можете использовать метод Files.move (путь к источнику, цель пути, параметры копирования …) (обратите внимание на использование varargs ).

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

1
2
3
4
5
import static java.nio.file.StandardCopyOption.*;
 
Path source = Paths.get("C:\\My Documents\\Stuff.txt");
Path target = Paths.get("D:\\Backup\\MyStuff.txt");
Files.move(source, target, REPLACE_EXISTING, COPY_ATTRIBUTES);

Как видите, новый NIO.2 API для манипулирования файлами прост в использовании, мы надеемся, что вам понравился этот маленький дегустатор!

Удачного кодирования! Не забудь поделиться!

Рекомендации :

Статьи по Теме: