Java Files – java.nio.file.Files 클래스

Java Files 클래스는 Java 1.7에서 소개되었으며 java.nio.file 패키지의 일부입니다.

Java Files 클래스

  • Java Files 클래스에는 파일 및 디렉토리에서 작동하는 정적 메서드가 포함되어 있습니다.
  • 이 클래스는 파일 시스템의 파일 또는 디렉토리를 만들고, 읽고, 쓰고, 복사하고, 삭제하는 기본 파일 작업에 사용됩니다.

전진하기 전에 먼저 아래 용어를 살펴 보겠습니다:

  1. Path: 이 인터페이스는 Java NIO에서 작업할 때 파일 또는 디렉토리의 표현으로 java.io.File 클래스를 대체합니다.
  2. Paths: 이 클래스에는 Path 인스턴스를 생성하는 정적 메서드가 포함되어 있습니다.

java.nio.file.Path 인터페이스는 옛날 java.io.File 클래스와 유사합니다. Path는 파일의 위치를 나타내며 새 파일의 Path를 만들 때까지 실제 파일을 생성하지 않습니다. Files.createFile(Path filePath)를 사용하여 파일을 생성할 때까지 생성하지 않습니다. 위 다이어그램에서 볼 수 있듯이 Paths 클래스는 Path의 인스턴스를 생성하는 데 사용되고 Files 클래스는 파일에서 작동하기 위해 Path 인스턴스를 사용합니다. FilePath 객체는 다른 객체로 변환하는 방법을 알고 있으며, 이것이 이전 코드를 새로운 Files 유틸리티와 상호 작용하는 방법입니다.

Java IO vs NIO

Path 생성 방법

Paths 클래스의 Paths.get(String first, String... more) 메서드를 호출하여 Path 객체를 생성할 수 있습니다.

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

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

Paths.get() 메서드에서 경로의 부분을 분리하여 Path 객체를 생성할 수도 있습니다.

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

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

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

우리는 Paths.get() 메서드에 폴더 및 파일 이름을 별도로 전달할 수 있습니다.

자바 파일 메서드

자바 NIO 파일 클래스에는 파일 및 디렉토리를 조작하는 데 사용되는 정적 메서드가 포함되어 있으며 이러한 메서드는 대부분 Path 객체에서 작동합니다. 아래의 Files 클래스 메서드를 살펴보겠습니다:

  1. copy(InputStream in, Path target, CopyOption… options): 이 메서드는 지정된 입력 스트림에서 모든 바이트를 지정된 대상 파일로 복사하고 long 값으로 읽거나 쓴 바이트 수를 반환합니다.
  2. copy(Path source, OutputStream out): 이 메서드는 지정된 소스 파일의 모든 바이트를 지정된 출력 스트림으로 복사하고 long 값으로 읽거나 쓴 바이트 수를 반환합니다.
  3. copy(Path source, Path target, CopyOption… options): 이 메서드는 지정된 소스 파일을 지정된 대상 파일로 복사하고 대상 파일의 경로를 반환합니다.
  4. createDirectories(Path dir, FileAttribute<?>… attrs): 이 메서드는 모든 존재하지 않는 상위 디렉토리를 먼저 생성하여 주어진 경로를 사용하여 디렉토리를 생성합니다. 이 메서드는 디렉토리가 이미 존재하기 때문에 생성되지 않으면 예외를 던지지 않습니다. FileAttribute는 존재하지 않는 디렉토리를 생성할 때 자동으로 설정되는 선택적 매개변수이며 생성된 디렉토리의 경로를 반환합니다.
  5. createDirectory(Path dir, FileAttribute<?>… attrs): 이 메서드는 주어진 경로를 사용하여 디렉토리를 생성하며, 성공적으로 디렉토리를 생성하면 생성된 디렉토리의 경로를 반환합니다. 이미 디렉토리가 있는 경우 nio.file.FileAlreadyExistsException을 throw합니다.
  6. createFile(Path path, FileAttribute<?>… attrs): 이 메서드는 주어진 경로를 사용하여 새로운 빈 파일을 생성하고, 성공적으로 파일을 생성하면 새로 생성된 파일의 경로를 반환합니다. 이미 파일이 있는 경우 nio.file.FileAlreadyExistsException을 throw합니다.
  7. createTempDirectory(Path dir, String prefix, FileAttribute<?>… attrs): 이 메서드는 주어진 경로를 사용하여 임시 디렉토리를 생성하고, 지정된 접두사를 사용하여 디렉토리의 이름을 생성합니다. 새롭게 생성된 임시 디렉토리의 경로를 반환합니다.
  8. createTempDirectory(String prefix, FileAttribute<?>… attrs): 이 메서드는 기본 임시 파일 디렉토리에 임시 디렉토리를 생성하고, 주어진 접두사를 사용하여 디렉토리의 이름을 생성합니다. 기본 파일 시스템과 연관된 새롭게 생성된 임시 디렉토리의 경로를 반환합니다.
  9. createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>… attrs): 이 메서드는 지정된 디렉토리에 임시 파일을 생성하고, 주어진 접두사와 접미사를 사용하여 파일 이름을 생성하고, 새롭게 생성된 파일의 경로를 반환합니다.
  10. createTempFile(String prefix, String suffix, FileAttribute<?>… attrs): 이 메서드는 기본 임시 파일 디렉토리에 임시 파일을 생성하고 지정된 접두사와 접미사를 사용하여 파일 이름을 생성한 다음 새로 생성된 파일의 경로를 반환합니다.
  11. delete(Path path): 이것은 void 메서드로 지정된 경로에서 파일을 단순히 삭제합니다. 이 메서드는 파일이 지정된 경로에 존재하지 않는 경우 NoSuchFileException을 throw하며, 파일이 디렉토리이고 비어 있지 않으며 삭제할 수 없는 경우에도 이 경우에는 throw됩니다.
  12. deleteIfExists(Path path): 이 메서드는 파일을 삭제하기 전에 파일이 있는지 확인하고 지정된 경로에서 파일이 성공적으로 삭제되면 true 값을 반환하고 지정된 경로에 파일이 존재하지 않으면 false 값을 반환합니다. 파일이 디렉토리이고 비어 있지 않으며 삭제할 수 없는 경우에도 이 경우에는 throw됩니다.
  13. exists(Path path): 이 메서드는 지정된 경로에 파일이 있는지 확인하고 파일이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
  14. getLastModifiedTime(Path path, Linkoption… options): 이 메서드는 지정된 경로에서 파일의 마지막 수정 시간을 반환합니다.
  15. getOwner(Path path, Linkoption… options): 이 메서드는 지정된 경로의 파일 소유자를 나타내는 UserPrincipal을 반환합니다.
  16. isDirectory(Path path, LinkOption… options): 이 메서드는 주어진 경로에서 파일이 디렉터리인지 확인합니다. 파일이 디렉터리이면 true를 반환하고, 파일이 존재하지 않거나 디렉터리가 아니거나 파일이 디렉터리인지 여부를 결정할 수 없는 경우 false를 반환합니다.
  17. isExecutable(Path path): 이 메서드는 주어진 경로의 파일이 실행 가능한지 확인합니다. 또한 파일이 존재하며 해당 JVM이 파일을 실행할 권한이 있는지도 확인합니다. 주어진 경로에 파일이 존재하고 실행 가능하면 true를 반환하고, 파일이 존재하지 않거나 JVM이 파일을 실행할 충분한 권한이 없거나 액세스를 결정할 수 없는 경우 false를 반환합니다.
  18. isHidden(Path path): 이 메서드는 주어진 파일이 숨겨진 파일인지 여부를 알려줍니다. 숨겨진 정의는 플랫폼이나 제공자에 따라 다릅니다. UNIX 시스템의 경우 파일 이름이 마침표 문자(‘.’)로 시작하는 경우 파일이 숨겨진 것으로 간주되며, WINDOWS의 경우 디렉터리가 아니고 DOS 숨김 속성이 설정된 경우 파일이 숨겨진 것으로 간주됩니다. 주어진 경로의 파일이 숨겨진 경우 true를 반환하고 그렇지 않으면 false를 반환합니다.
  19. isReadable(Path path): 이 메서드는 주어진 경로의 파일이 읽을 수 있는지 테스트합니다. 지정된 경로의 파일이 존재하고 읽을 수 있는 경우 true를 반환하고, 파일이 존재하지 않거나 JVM이 충분한 권한을 갖고 있지 않거나 액세스를 결정할 수 없는 경우 false를 반환합니다.
  20. isWritable(Path path): 이 메서드는 주어진 경로의 파일이 쓰기 가능한지 여부를 테스트합니다. 지정된 경로의 파일이 존재하고 쓰기 가능한 경우 true를 반환하고 파일이 존재하지 않거나 JVM에 충분한 권한이 없거나 액세스를 결정할 수 없는 경우 false를 반환합니다.
  21. move(Path source, Path target, CopyOption… options): 이 메서드는 소스 파일을 대상 파일로 이동하거나 이름을 변경하고 대상 파일의 경로를 반환합니다. 옵션 매개변수는 다음을 포함할 수 있습니다: REPLACE_EXISTING: 대상 파일이 존재하는 경우 비어 있지 않은 디렉토리가 아닌 경우 대상 파일을 대체합니다. ATOMIC_MOVE: 이것은 이동이 원자적 파일 시스템 작업으로 수행되고 다른 모든 옵션이 무시됩니다. 이 메서드는 대상 파일이 존재하지만 REPLACE_EXISTING 옵션이 지정되지 않았기 때문에 대상 파일을 대체할 수 없는 경우 FileAleadyExistsException을 throw합니다. 이 메서드는 REPlACE_EXISTING 옵션이 지정된 경우 파일이 비어 있지 않은 디렉토리이기 때문에 대체할 수 없는 경우 DirectoryNotEmptyException을 throw합니다.
  22. newBufferedReader(Path path, Charset cs): 이 메서드는 주어진 경로를 사용하여 파일을 읽기 위해 BufferedReader를 반환하여 파일을 엽니다. 파일의 바이트는 지정된 문자 집합을 사용하여 문자로 디코딩됩니다.
  23. newBufferedWriter(Path path, Charset cs, Openoption… options): 이 메서드는 주어진 경로를 사용하여 파일을 열거나 생성하여 해당 파일에 텍스트를 작성하는 데 사용되는 BufferedWriter를 반환합니다. 옵션 매개변수는 파일이 생성되거나 열리는 방법을 지정합니다. 옵션이 지정되지 않은 경우 기본적으로 CREATE, TRUNCATE_EXISTING 및 WRITE 옵션을 고려합니다. 이는 파일을 쓰기 위해 파일을 열고 파일이 없는 경우 생성하거나 파일이 이미 존재하는 경우 크기를 0으로 줄입니다. 이 메서드는 지원되지 않는 옵션이 지정된 경우 UnsupportedOperationException을 throw합니다.
  24. newByteChannel(Path path, OpenOption… options): 이 메서드는 지정된 경로를 사용하여 파일을 생성하거나 열어 해당 파일에 액세스하는 Seekable 바이트 채널을 반환합니다. 지원되지 않는 옵션이 지정된 경우 UnsupportedOperationException을 throw합니다.
  25. newDirectoryStream(Path path): 이 메서드는 지정된 경로에서 디렉터리를 열어 DirectoryStream을 반환하여 디렉터리의 모든 항목을 반복할 수 있습니다. DirectoryStream의 반복자가 반환하는 요소는 Path 유형이며 각각 디렉터리의 항목을 나타냅니다. 이 메서드는 주어진 경로의 파일을 디렉터리로 열 수 없는 경우 NotDirectoryException을 throw합니다.
  26. newDirectoryStream(Path path, Filter<? super Path > filter): 이 메소드는 지정된 경로에서 디렉토리의 모든 항목을 반복하는 DirectoryStream을 반환하여 디렉토리를 엽니다. DirectoryStream의 반복자에 의해 반환되는 요소는 Path 유형이며 각각은 디렉토리의 항목을 나타내며 지정된 필터에 의해 필터링됩니다. 이 메소드는 주어진 경로의 파일을 열 수 없는 경우 디렉토리가 아니기 때문에 NotDirectoryException을 throw합니다.
  27. newDirectoryStream(Path path, String glob): 이 메소드는 지정된 경로에서 디렉토리의 모든 항목을 반복하는 DirectoryStream을 반환하여 디렉토리를 엽니다. DirectoryStream의 반복자에 의해 반환되는 요소는 Path 유형이며 각각은 디렉토리의 항목을 나타내며 지정된 globbing 패턴과 일치하는 파일 이름의 문자열 표현과 비교하여 필터링됩니다. 이 메소드는 주어진 경로의 파일을 열 수 없는 경우 디렉토리가 아니기 때문에 NotDirectoryException을 throw하며 패턴이 잘못된 경우 PatternSyntaxException을 throw합니다.
  28. newInputStream(Path path, Openoption… options): 이 메소드는 지정된 경로에서 파일을 읽기 위해 입력 스트림을 반환하여 파일을 엽니다. options 매개변수는 파일이 열리는 방식을 결정하며 옵션이 지정되지 않으면 파일이 READ로 열립니다. 이 메소드는 잘못된 옵션 조합이 지정된 경우 IllegalArgumentException을 throw하고 지원되지 않는 옵션이 지정된 경우 UnsupportedOperationException을 throw합니다.
  29. newOutputStream(Path path, Openoption… 옵션): 이 메서드는 지정된 경로에 파일을 열어 바이트를 쓰기 위한 출력 스트림을 반환하여 파일을 엽니다. 옵션 매개변수는 파일이 어떻게 열리는지를 결정하며, 옵션이 지정되지 않은 경우 기본적으로 CREATE, TRUNCATE_EXISTINGWRITE 옵션을 고려합니다. 이는 파일을 쓰기 위해 파일을 열고 파일이 존재하지 않으면 파일을 만들거나 파일이 이미 존재하는 경우 크기를 0으로 줄입니다. 이 메서드는 옵션의 잘못된 조합이 지정된 경우 IllegalArgumentException을 발생시키며 지원되지 않는 옵션이 지정된 경우 UnsupportedOperationException을 발생시킵니다.
  30. notExists(Path path, LinkOption 옵션): 이 메서드는 지정된 경로의 파일이 존재하지 않는지를 테스트합니다. 옵션 매개변수는 파일이 심볼릭 링크인 경우 해당하는 방법을 나타내는 데 사용됩니다. 기본적으로 심볼릭 링크는 따라갑니다. NOFOLLOW_LINK 옵션이 있는 경우 심볼릭 링크는 따라가지 않습니다. 이 메서드는 지정된 경로에 파일이 존재하지 않으면 true를 반환하고 파일이 존재하거나 존재 여부를 확인할 수 없는 경우 false를 반환합니다.
  31. readAllBytes(Path path): 이 메서드는 지정된 경로의 파일에서 모든 바이트를 읽어 파일에서 읽은 바이트를 포함하는 바이트 배열을 반환합니다.
  32. readAllLines(Path path, Charset cs): 이 메서드는 지정된 경로의 파일에서 모든 줄을 읽어 파일에서 읽은 줄을 포함하는 List를 반환합니다.
  33. size(Path path): 이 메서드는 지정된 경로의 파일 크기를 바이트 단위로 반환합니다.
  34. walkFileTree(Path start, FileVisitor<? Super Path> visitor): 이 메서드는 디렉토리를 탐색하는 데 사용됩니다. 지정된 경로의 디렉토리를 재귀적으로 탐색하고 시작 파일을 반환합니다.
  35. write(Path path, byte[] bytes, OpenOption… options): 이 메서드는 지정된 경로의 파일에 바이트를 씁니다. options 매개변수는 파일이 생성되거나 열리는 방법을 지정합니다. 옵션이 지정되지 않으면 기본적으로 CREATE, TRUNCATE_EXISTINGWRITE 옵션이 고려됩니다. 이는 파일을 쓰기 위해 파일을 열고 파일이 없는 경우 파일을 생성하거나 파일이 있는 경우 기존 파일을 크기 0으로 줄입니다. 바이트 배열의 모든 바이트가 파일에 씌여집니다. 이 메서드는 모든 바이트가 쓰여진 후 파일이 닫히도록 보장하고 쓰여진 파일의 경로를 반환합니다.

Files 클래스를 사용하여 파일 생성하기

Files 클래스는 지정된 Path를 사용하여 파일을 생성하는 createFile(Path filePath, FileAttribute<?>… 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) {
		
		// Path 객체 초기화
		Path path = Paths.get("D:/data/file.txt");
		// 파일 생성
		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 클래스는 지정된 Path를 사용하여 단일 및 다중 수준의 디렉토리를 만들기 위한 createDirectory(Path dir, FileAttribute<?>… attrs)createDirectories(Path dir, FileAttribute<?>… 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) {
		// Path 객체 초기화
		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(Path path): 이 메서드는 지정된 경로의 파일에서 모든 바이트를 읽어들이고 파일에서 읽은 바이트를 포함하는 바이트 배열을 반환합니다.
  2. readAllLines(Path path,Charsetcs): 이 메서드는 지정된 경로의 파일에서 모든 줄을 읽어들이고 파일에서 가져온 줄을 포함하는 List를 반환합니다.

아래 예제 프로그램을 살펴보겠습니다.

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<String> 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 클래스는 주어진 소스 파일을 지정된 대상 파일로 복사하는 copy(Path source, Path target, CopyOption… options) 메서드를 제공하며 대상 파일의 경로를 반환합니다. 아래 예제 프로그램을 살펴보겠습니다:

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 클래스는 move(Path source, Path target, CopyOption… options) 메서드를 제공하며, 이 메서드는 소스 파일을 대상 파일로 이동하거나 이름을 변경하고 대상 파일의 경로를 반환합니다. 옵션 매개변수에는 다음이 포함될 수 있습니다: REPLACE_EXISTING: 대상 파일이 이미 존재하는 경우 비어 있지 않은 디렉터리가 아닌 경우 대상 파일을 대체합니다. ATOMIC_MOVE: 이 옵션은 이동이 원자적 파일 시스템 작업으로 수행되며 다른 모든 옵션이 무시됩니다. 이 메서드는 대상 파일이 존재하지만 REPLACE_EXISTING 옵션이 지정되지 않았기 때문에 대상 파일을 대체할 수 없는 경우 FileAleadyExistsException을 발생시킵니다. 이 메서드는 REPlACE_EXISTING 옵션이 지정되었지만 파일이 비어 있지 않은 디렉터리이기 때문에 파일을 대체할 수 없는 경우 DirectoryNotEmptyException을 발생시킵니다. 아래 예제 프로그램을 살펴보겠습니다:

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 파일 클래스는 지정된 경로에 파일로 바이트를 쓰는 write(Path path, byte[] bytes, OpenOption… options) 메서드를 제공합니다. 옵션 매개변수는 파일이 생성되거나 열리는 방법을 지정합니다. 옵션이 지정되지 않으면 기본적으로 CREATE, TRUNCATE_EXISTINGWRITE 옵션으로 간주됩니다. 이는 파일을 쓰기 위해 파일을 열고, 파일이 존재하지 않으면 파일을 생성하거나 이미 존재하는 파일을 크기 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();
		}

	}

}

파일 트리 걷기

Files 클래스는 디렉토리를 순회하는 데 사용되는 walkFileTree(Path start, FileVisitor<? Super Path> visitor) 메서드를 제공합니다. 지정된 경로의 디렉토리를 재귀적으로 순회하고 시작 파일을 반환합니다.

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<Path>() {

				@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 Files 클래스에 관한 설명은 끝입니다. 참고: API 문서

Source:
https://www.digitalocean.com/community/tutorials/java-files-nio-files-class