Рубрики
Без рубрики

Файлы Java – java.nio.файл.Класс файлов

Класс Java – файлов, java.nio.файл.Класс файлов, Класс файлов Java 7, Путь к файлу Java, Пакет Java NIO, Файлы Java NIO, Java IO vs NIO, Файлы Java создают файл, создают каталог, копируют файл, перемещают файл, записывают файл, читают файл, обходят файловое дерево, Учебник по примерам файлов Java, Файлы Java.пример копирования.

Автор оригинала: Pankaj Kumar.

Класс Java Files был представлен в Java 1.7 и является частью java.nio.file пакета.

Класс файлов Java

  • Класс Java Files содержит статические методы, которые работают с файлами и каталогами.
  • Этот класс используется для основных файловых операций, таких как создание, чтение, запись, копирование и удаление файлов или каталогов файловой системы.

Прежде чем двигаться дальше, давайте сначала рассмотрим приведенные ниже условия:

  1. Путь : Это интерфейс, который заменяет java.io.Файл класс как представление файла или каталога, когда мы работаем в Java NIO.
  2. Пути : Этот класс содержит статический метод для создания Пути экземпляра.

java.nio.файл.Путь интерфейс такой же, как у старого java.io.Файл класс. Путь представляет местоположение файла, и когда мы создаем путь к новому файлу, он не создает фактический файл, пока мы не создадим его с помощью Files.CreateFile(Путь к файлу) . Как мы видим на приведенной выше диаграмме, класс Путей используется для создания экземпляра Пути, а класс файлов использует экземпляр пути для работы с файлом.

Файл и Путь объекты знают, как конвертировать в другой, поэтому мы можем использовать более старый код для взаимодействия с новыми Файлами утилитой.

Java IO против NIO

Как создать путь

Мы можем создать объект Path , вызвав Paths.get(сначала строка, строка... подробнее) метод Путей класса.

Path path1 = Paths.get("/tmp/file.txt"); // For UNIX

Path path2 = Paths.get("D:/data/file.txt"); // For Windows

Мы также можем создать объект Path , разделив части пути в методе Paths.get () .

Path path1 = Paths.get("/tmp", "file.txt");

Path path2 = Paths.get("D:", "data", "file.txt");

Path path3 = Paths.get("D:/data", "file.txt") ;

Как мы видим, мы можем передать папку и имя файла в Пути.get() метод отдельно.

Методы файлов Java

Класс Java NIO Files содержит статические методы, которые используются для управления файлами и каталогами, и эти методы в основном работают с Путем объектом.

Давайте рассмотрим приведенные ниже методы класса Files:

  1. копировать(входной поток в, целевой путь, копирование… параметры): Этот метод копирует все байты из указанного входного потока в указанный целевой файл и возвращает количество прочитанных или записанных байтов в виде длинного значения.
  2. копировать(исходный путь, выходной поток): Этот метод копирует все байты из указанного исходного файла в заданный выходной поток и возвращает количество прочитанных или записанных байтов в виде длинного значения.
  3. копировать(исходный путь, целевой путь, вариант копирования… параметры): Этот метод копирует данный исходный файл в указанный целевой файл и возвращает путь к целевому файлу.
  4. createDirectories(Каталог пути, атрибут файла… attrs): Этот метод создает каталоги по заданному пути, сначала создавая все несуществующие родительские каталоги. Этот метод не вызовет исключения, если каталог не удалось создать, поскольку он уже существует. Атрибут файла-это необязательный параметр, который автоматически устанавливается при создании несуществующих каталогов и возвращает путь к созданному каталогу.
  5. CreateDirectory(Каталог пути, атрибут файла… attrs): Этот метод создает каталог по заданному пути, если он успешно создаст каталог, он вернет путь к созданному каталогу. Если каталог уже существует, то он выдаст nio.file.Исключение FileAlreadyExistsException.
  6. CreateFile(Путь к файлу, атрибут файла… attrs): Этот метод создает новый пустой файл по заданному пути и возвращает путь к вновь созданному файлу, если он успешно его создает. Если файл уже существует, то он выдаст nio.file.Исключение FileAlreadyExistsException.
  7. createTempDirectory(Каталог пути, префикс строки, атрибут файла… attrs): Этот метод создает временный каталог по заданному пути и сгенерирует имя каталога с заданным префиксом. Он вернет путь к вновь созданному временному каталогу.
  8. createTempDirectory(префикс строки, атрибут файла… attrs): Этот метод создает временный каталог в каталоге временных файлов по умолчанию и генерирует имя каталога с использованием заданного префикса. Он вернет путь к вновь созданному временному каталогу, который связан с файловой системой по умолчанию.
  9. createTempFile(Каталог пути, префикс строки, суффикс строки, атрибут файла… attrs): Этот метод создает временный файл в указанном каталоге и генерирует имя файла с использованием заданных префикса и суффикса и возвращает путь к вновь созданному файлу.
  10. createTempFile(Префикс строки, суффикс строки, атрибут файла… attrs): Этот метод создает временный файл в каталоге временных файлов по умолчанию и генерирует имя файла с использованием заданных префикса и суффикса и возвращает путь к вновь созданному файлу.
  11. удалить(Путь к пути): Это пустой метод, который просто удаляет файл с указанного пути. Этот метод вызывает исключение NoSuchFileException если файл не существует по указанному пути и если файл является каталогом, и он не может быть пустым и не может быть удален, в этом случае он будет вызывать
  12. deleteIfExists(Путь к пути): Этот метод проверяет, существует ли файл перед удалением файла, и возвращает логическое значение true, если файл по заданному пути успешно удален, и возвращает значение false, если файл не существует по заданному пути. Если файл является каталогом, и он не может быть пустым и не может быть удален, в этом случае он будет выбрасывать
  13. существует(Путь к пути): Этот метод проверяет, существует ли файл по указанному пути, и если файл существует, он вернет значение true или false.
  14. getLastModifiedTime(Путь, ссылка… параметры): Этот метод возвращает время последнего изменения файла с заданного пути в виде
  15. getOwner(Путь, ссылка… параметры): Этот метод возвращает Принципала пользователя , представляющего владельца файла по заданному пути.
  16. isDirectory(Путь, ссылка… параметры): Этот метод проверяет, является ли файл каталогом с заданного пути. Он возвращает значение true, если файл является каталогом, и значение false, если файл не существует или не является каталогом, или невозможно определить, является ли файл каталогом или нет.
  17. isExecutable(Путь к пути): Этот метод проверяет, является ли файл по заданному пути исполняемым или нет, а также проверяет, существует ли файл и имеет ли эта JVM соответствующие привилегии для выполнения файла. Он возвращает значение true, если файл существует по заданному пути и является исполняемым, и значение false, если файл не существует или JVM не имеет достаточных прав для выполнения файла или доступ не может быть определен.
  18. isHidden(Путь к пути): Этот метод определяет, считается ли данный файл скрытым или нет. Точное определение скрытого зависит от платформы или поставщика. В системе UNIX файл считается скрытым, если имя файла начинается с символа точки ( ” .”), а в системе WINDOWS файл считается скрытым, если он не является каталогом и установлен атрибут DOS hidden. Он возвращает значение true, если файл по заданному пути считается скрытым или ложным.
  19. Является читаемым(Путь к пути): Этот метод проверяет, читаем ли файл по заданному пути или нет. Он повторяет значение true, если файл по указанному пути существует и доступен для чтения, и значение false, если файл не существует или доступ для чтения запрещен, поскольку JVM не имеет достаточных привилегий или доступ не может быть определен.
  20. isWritable(Путь к пути): Этот метод проверяет, доступен ли файл по заданному пути для записи или нет. Он повторяет значение true, если файл по указанному пути существует и доступен для записи, и значение false, если файл не существует или доступ на запись запрещен, поскольку JVM не имеет достаточных привилегий или доступ не может быть определен.
  21. переместить(исходный путь, целевой путь, копирование… параметры): Этот метод перемещает или переименовывает исходный файл в целевой файл и возвращает путь к целевому файлу. Параметр опции может включать следующее: REPLACE_EXISTING: Это означает, что если целевой файл существует, то он заменяет его, если это не непустой каталог.

    ATOMIC_MOVE: Это означает, что перемещение выполняется как операция атомной файловой системы, а все остальные параметры игнорируются.

    Этот метод вызывает исключение Filealreadyexistsexception , если целевой файл существует, но не может быть заменен, поскольку параметр REPLACE_EXISTING не указан.

    Этот метод вызывает исключение DirectoryNotEmptyException , если указана опция REPlACE_EXISTING , но файл не может быть заменен, поскольку это непустой каталог.

  22. newBufferedReader(Путь, кодировка cs): Этот метод открывает файл, используя заданный путь для чтения, возвращая BufferedReader, который использовался для чтения текста из файла.Байты из файла декодируются в символы с использованием указанной кодировки.
  23. newBufferedWriter(Путь, кодировка cs, Openoption… параметры): Этот метод открывает или создает файл, используя заданный путь для записи, возвращая BufferedWriter, который использовался для записи текста в файл. Параметр options указывает, как создается или открывается файл. Если параметр не указан, то по умолчанию он рассматривает параметры CREATE, TRUNCATE_EXISTING и WRITE , это означает, что он открывает файл для записи и создает, если файл не существует, или обрезает существующий файл до размера 0, если он существует. Этот метод вызывает исключение UnsupportedOperationException , если указан неподдерживаемый параметр.
  24. newByteChannel(Путь, OpenOption… параметры): Этот метод создает или открывает файл по указанному пути, возвращая байтовый канал для доступа к файлу. Этот метод вызывает исключение UnsupportedOperationException , если указан неподдерживаемый параметр.
  25. newDirectoryStream(Путь к пути): Этот метод открывает каталог, возвращая поток каталогов для перебора всех записей в каталоге по указанному пути. Элементы, возвращаемые итератором потока каталогов, имеют тип Path, и каждый из них представляет запись в каталоге. Этот метод вызывает исключение NotDirectoryException , если файл по заданному пути не может быть открыт, поскольку он не является каталогом.
  26. newDirectoryStream(Путь, путь, Фильтр супер путь > фильтр): Этот метод открывает каталог, возвращая поток каталогов для перебора всех записей в каталоге по указанному пути. Элементы, возвращаемые итератором потока каталогов, имеют тип Path, и каждый из них представляет запись в каталоге, и эти записи фильтруются указанным фильтром. Этот метод вызывает исключение NotDirectoryException , если файл по заданному пути не может быть открыт, поскольку он не является каталогом. супер путь > фильтр):
  27. Этот метод открывает каталог, возвращая поток каталогов для перебора всех записей в каталоге по указанному пути. Элементы, возвращаемые итератором потока каталогов, имеют тип Path, и каждый из них представляет запись в каталоге, и эти записи фильтруются указанным фильтром. Этот метод вызывает исключение NotDirectoryException , если файл по заданному пути не может быть открыт, поскольку он не является каталогом. newDirectoryStream(Путь, строка, глобус): Этот метод открывает каталог, возвращая поток каталогов для перебора всех записей в каталоге по указанному пути. Элементы, возвращаемые итератором DirectoryStream, имеют тип Path, и каждый из них представляет запись в каталоге, и эти записи фильтруются путем сопоставления строкового представления их имен файлов с указанным шаблоном глобирования. Этот метод вызывает исключение NotDirectoryException
  28. , если файл по заданному пути не может быть открыт, потому что он не является каталогом, и исключение Patterns sintaxexception , если шаблон недопустим. newInputStream(Путь, Openoption… параметры): Этот метод открывает файл, возвращая inputstream для чтения файла с указанного пути. Параметр options определяет способ открытия файла, и если параметры не указаны, он открывает файл с помощью READ Этот метод вызывает Исключение IllegalArgumentException
  29. , если указана недопустимая комбинация параметров, и Исключение UnsupportedOperationException , если указана неподдерживаемая опция. newOutputStream(Путь, Openoption… параметры): Этот метод открывает файл, возвращая outputstream для записи байтов в файл по указанному пути. Параметр options определяет способ открытия файла, и если параметр не указан, то по умолчанию он рассматривает CREATE, TRUNCATE_EXISTING и WRITE параметры, это означает, что он открывает файл для записи и создает, если файл не существует, или обрезает существующий файл до размера 0, если он существует. Этот метод вызывает Исключение IllegalArgumentException
  30. , если указана недопустимая комбинация параметров, и Исключение UnsupportedOperationException , если указана неподдерживаемая опция. не существует(Путь к пути, параметры компоновки):
  31. Этот метод проверяет, не существует ли файл по указанному пути. Параметр options используется для указания того, как обрабатываются символьные ссылки, если файл является символьной ссылкой. По умолчанию используются символические ссылки. Если опция NOFOLLOW_LINK
  32. присутствует, то символические ссылки не следуют. Этот метод возвращает значение true, если файл не существует по указанному пути, и значение false, если файл существует или если его существование невозможно определить. ReadAllBytes(Путь к пути): Этот метод считывает все байты из файла по заданному пути и возвращает массив байтов, содержащий байты, считанные из файла. ReadAllLines(Путь, кодировка cs):
  33. Этот метод считывает все строки из файла по заданному пути и возвращает Список
  34. , содержащий строки из файла. размер(Путь к пути):
  35. Этот метод возвращает размер файла по указанному пути в байтах. walkFileTree(Начало пути, просмотрщик файлов Супер путь> посетитель): Этот метод используется для обхода каталога. Он рекурсивно пересекает каталог по указанному пути и возвращает начальный файл. Супер путь> посетитель): Этот метод используется для обхода каталога. Он рекурсивно пересекает каталог по указанному пути и возвращает начальный файл. запись(Путь к пути, байт[] байт, OpenOption… параметры): Этот метод записывает байты в файл по указанному пути. Параметр options указывает, как создается или открывается файл. Если параметр не указан, то по умолчанию он рассматривает параметры

Создайте файл с помощью Класса Files

Класс Files предоставляет CreateFile(Путь к файлу, Атрибуты файла... attrs) метод создания файла с использованием указанного Пути .

Давайте взглянем на приведенный ниже пример программы.

package com.journaldev.examples;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * Java Create file using Files class
 * 
 * @author pankaj
 *
 */
public class FilesCreateFileExample {

	public static void main(String[] args) {
		
		//initialize Path object
		Path path = Paths.get("D:/data/file.txt");
		//create file
		try {
			Path createdFilePath = Files.createFile(path);
			System.out.println("File Created at Path : "+createdFilePath);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Выходные данные вышеупомянутой программы приведены ниже:

File Created at Path : D:\data\file.txt

Создание Каталогов С Помощью Класса Files

Класс Files предоставляет CreateDirectory(Каталог пути, атрибут файла... attrs) и createDirectories(Каталог пути, атрибут файла... attrs) методы для создания одноуровневых и многоуровневых каталогов с использованием указанного Пути .

Давайте взглянем на приведенный ниже пример программы.

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * Java Create directories using Files class
 * 
 * @author pankaj
 *
 */
public class FilesCreateDirectoriesExample {

	public static void main(String[] args) {
		// initialize Path objects
		Path path1 = Paths.get("D:/pankaj");
		Path path2 = Paths.get("D:/pankaj/java7");
		Path path3 = Paths.get("D:/pankaj/java7/Files");
		
		try {
			Path createdDir1 = Files.createDirectory(path1);//first level directory
			Path createdDir2 = Files.createDirectory(path2);//second level directory
			Path createdDir3 = Files.createDirectory(path3);//all level directories
			System.out.println("First Level Directory Created at Path : "+createdDir1);
			System.out.println("Second Level Directory Created at Path : "+createdDir2);
			System.out.println("All Level Directories Created at Path : "+createdDir3);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Выходные данные вышеупомянутой программы приведены ниже:

First Level Directory Created at Path : D:\pankaj
Second Level Directory Created at Path : D:\pankaj\java7
All Level Directories Created at Path : D:\pankaj\java7\Files

Преобразуйте файл в путь и наоборот

Объекты файла и пути могут быть преобразованы друг в друга с помощью следующих методов:

File file = new File("D:/data/file.txt");

Path path = file.toPath();

File file1 = path.toFile();

Считывание данных файла с помощью класса Files

Класс Files предоставляет следующие методы для чтения файла.

  1. ReadAllBytes(Путь к пути) : Этот метод считывает все байты из файла по заданному пути и возвращает массив байтов, содержащий байты, считанные из файла.
  2. ReadAllLines(Путь,кодировка cs) : Этот метод считывает все строки из файла по заданному пути и возвращает Список , содержащий строки из файла.

Давайте взглянем на приведенный ниже пример программы.

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

/**
 * Java Files read file example
 * 
 * @author pankaj
 *
 */
public class FilesReadFileExample {

	public static void main(String[] args) {
		
		Path path = Paths.get("D:/data/file.txt");
		try {
			byte[] bs = Files.readAllBytes(path);
			List strings = Files.readAllLines(path);
			
			System.out.println("Read bytes: \n"+new String(bs));
			System.out.println("Read lines: \n"+strings);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Результат вышеприведенной программы приведен ниже:

Read bytes: 
Hello world
This is Read file example
Thank you
Read lines: 
[Hello world, This is Read file example, Thank you]

Скопируйте файл с помощью класса Files

Класс Files предоставляет копию(исходный путь, целевой путь, параметры копирования...) метод, который копирует данный исходный файл в указанный целевой файл и возвращает путь к целевому файлу.

Давайте взглянем на приведенный ниже пример программы:

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/**
 * Java Files copy file example
 * 
 * @author pankaj
 *
 */
public class FilesCopyFileExample {

	public static void main(String[] args) {
		Path sourcePath = Paths.get("D:/data/sourceFile.txt");
		Path targetPath = Paths.get("D:/data/targetFile.txt");
		
		try {
			Path path = Files.copy(sourcePath, targetPath,StandardCopyOption.REPLACE_EXISTING);//copy with REPLACE_EXISTING option
			System.out.println("Target file Path : "+path);
			System.out.println("Copied Content : \n"+new String(Files.readAllBytes(path)));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

Результат вышеприведенной программы приведен ниже:

Target file Path : D:\data\targetFile.txt
Copied Content : 
Hello world
This is Copy file example
Thank you

Переместить файл с помощью класса Files

Класс Java Files предоставляет метод перемещения(исходный путь, целевой путь, параметры копирования...) , который перемещает или переименовывает исходный файл в целевой файл и возвращает путь к целевому файлу.

Параметр опции может включать в себя следующее:

REPLACE_EXISTING: Это означает, что если целевой файл существует, то он заменяет его, если он не является непустым каталогом.

ATOMIC_MOVE: Это означает, что перемещение выполняется как операция атомной файловой системы, а все остальные параметры игнорируются.

Этот метод вызывает исключение Filealreadyexistsexception , если целевой файл существует, но не может быть заменен, поскольку параметр REPLACE_EXISTING не указан.

Этот метод вызывает исключение DirectoryNotEmptyException , если указана опция REPlACE_EXISTING , но файл не может быть заменен, поскольку это непустой каталог.

Давайте взглянем на приведенный ниже пример программы:

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/**
 * Java Files move file example
 * 
 * @author pankaj
 *
 */
public class FilesMoveFileExample {

	public static void main(String[] args) {
		Path sourcePath = Paths.get("D:/data/sourceFile.txt");
		Path targetPath = Paths.get("D:/data/targetFile.txt");
		try {
			Path path = Files.move(sourcePath, targetPath,StandardCopyOption.REPLACE_EXISTING);//move with REPLACE_EXISTING option
			System.out.println("Target file Path : "+path);
			System.out.println("Moved Content : \n"+new String(Files.readAllBytes(path)));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Запись файла с помощью класса Files

Класс файлов Java NIO предоставляет запись(путь, байт[] байт, параметры OpenOption...) метод, который записывает байты в файл по указанному пути.

Параметр options указывает, как создается или открывается файл. Если опция не указана, то по умолчанию она учитывает CREATE, TRUNCATE_EXISTING и WRITE параметры. Это означает, что он открывает файл для записи и создает, если файл не существует, или обрезает существующий файл до размера 0, если он существует.

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

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * Java Files write file example
 * 
 * @author pankaj
 *
 */
public class FilesWriteFileExample {

	public static void main(String[] args) {
		Path path = Paths.get("D:/data/test.txt");
		try {
			String str = "This is write file Example";
			byte[] bs = str.getBytes();
			Path writtenFilePath = Files.write(path, bs);
			System.out.println("Written content in file:\n"+ new String(Files.readAllBytes(writtenFilePath)));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

walkFileTree

Класс Files предоставляет walkFileTree(Начало пути, FileVisitor Супер путь> посетитель) метод, используемый для обхода каталога. Он рекурсивно пересекает каталог по указанному пути и возвращает начальный файл. Супер путь> посетитель)

package com.journaldev.examples;

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * Java Files walk file tree example
 * 
 * @author pankaj
 *
 */
public class FilesWalkFileTreeExample {

	public static void main(String[] args) {
		Path path = Paths.get("D:/pankaj");
		try {
			Files.walkFileTree(path, new FileVisitor() {

				@Override
				public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
					System.out.println("Post Visit Directory: "+dir);
					return FileVisitResult.CONTINUE;
				}

				@Override
				public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
					System.out.println("Pre Visit Directory: "+dir);
					return FileVisitResult.CONTINUE;
				}

				@Override
				public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
					System.out.println("Visit File: "+file);
					return FileVisitResult.CONTINUE;
				}

				@Override
				public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
					System.out.println("Visit Failed File: "+file);
					return FileVisitResult.CONTINUE;
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

Результат вышеприведенной программы приведен ниже:

Pre Visit Directory: D:\pankaj
Pre Visit Directory: D:\pankaj\java6
Pre Visit Directory: D:\pankaj\java6\Files
Visit File: D:\pankaj\java6\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java6\Files
Post Visit Directory: D:\pankaj\java6
Pre Visit Directory: D:\pankaj\java7
Pre Visit Directory: D:\pankaj\java7\Files
Visit File: D:\pankaj\java7\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java7\Files
Post Visit Directory: D:\pankaj\java7
Pre Visit Directory: D:\pankaj\java8
Pre Visit Directory: D:\pankaj\java8\Files
Visit File: D:\pankaj\java8\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java8\Files
Post Visit Directory: D:\pankaj\java8
Post Visit Directory: D:\pankaj

Обратите внимание, что все файлы и папки обрабатываются рекурсивно. Это очень полезно, когда вы хотите выполнить некоторую общую обработку всех файлов, например, рекурсивно переименовать все файлы в каталоге.

Это все для класса Java-файлов.

Ссылка: API Doc