1. Files클래스

파일 클래스

파일 작업을 위해 매끄러운 유틸리티 클래스인 java.nio.file.Files. 모든 경우에 대한 방법이 있습니다. 이 클래스의 모든 메서드는 정적이며 Path 개체에서 작동합니다. 많은 방법이 있으므로 가장 중요한 방법만 고려할 것입니다.

방법 설명
Path createFile(Path path)
경로가 인 새 파일을 만듭니다.path
Path createDirectory(Path path)
새 디렉터리를 만듭니다.
Path createDirectories(Path path)
여러 디렉토리 생성
Path createTempFile(prefix, suffix)
임시 파일 생성
Path createTempDirectory(prefix)
임시 디렉토리 생성
void delete(Path path)
비어 있는 경우 파일 또는 디렉토리를 삭제합니다.
Path copy(Path src, Path dest)
파일 복사
Path move(Path src, Path dest)
파일 이동
boolean isDirectory(Path path)
경로가 파일이 아닌 디렉토리인지 확인
boolean isRegularFile(Path path)
경로가 디렉토리가 아닌 파일인지 확인
boolean exists(Path path)
주어진 경로에 객체가 존재하는지 확인
long size(Path path)
파일 크기를 반환
byte[] readAllBytes(Path path)
파일의 전체 내용을 바이트 배열로 반환
String readString(Path path)
파일의 전체 내용을 문자열로 반환
List<String> readAllLines(Path path)
파일의 전체 내용을 문자열 목록으로 반환
Path write(Path path, byte[])
바이트 배열을 파일에 씁니다.
Path writeString(Path path, String str)
문자열을 파일에 씁니다.
DirectoryStream<Path> newDirectoryStream(Path dir)
지정된 디렉토리에서 파일(및 하위 디렉토리) 모음을 반환합니다.

2. 파일 및 디렉토리 생성

파일과 디렉토리는 생성하기가 매우 쉽습니다. 몇 가지 예를 들어 자신을 설득해 봅시다.

암호 메모
Files.createFile(Path.of("c:\\readme.txt"));
파일 생성
Files.createDirectory(Path.of("c:\\test"));
디렉토리 생성
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
존재하지 않는 경우 디렉토리 및 필요한 모든 하위 디렉토리를 생성합니다.

3. 복사, 이동 및 삭제

파일 복사, 이동 및 삭제도 마찬가지로 쉽습니다. 이는 디렉터리에도 적용되지만 비어 있어야 합니다.

암호 메모
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
파일 복사
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
파일 이동 및 이름 바꾸기
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
파일을 삭제합니다

4. 파일의 종류 및 존재 여부 확인

다른 사람이 제공한 경로가 있을 때 파일인지 디렉토리인지 알고 싶을 것입니다. 그리고 일반적으로 그러한 파일/디렉토리가 존재합니까?

이를 위한 특별한 방법도 있습니다. 파일 길이를 쉽게 찾을 수도 있습니다.

암호 메모
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. 파일 내용 작업

마지막으로, 파일의 내용을 쉽게 읽거나 쓸 수 있는 일련의 메서드가 있습니다. 예:

암호 설명
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

파일의 내용을 문자열 목록으로 읽습니다.

문자열 표시


6. 디렉토리 내용 가져오기

가장 흥미로운 방법은 여전히 ​​남아 있습니다. 주어진 디렉토리에서 파일과 하위 디렉토리를 가져오는 데 사용됩니다.

newDirectoryStream()우리는 특별한 객체를 반환하는 메서드 에 대해 이야기하고 있습니다 DirectoryStream<Path>. 주어진 디렉토리의 모든 파일과 하위 디렉토리를 가져오는 데 사용할 수 있는 반복자(!)가 있습니다.

생각보다 쉽습니다.

암호 설명
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


파일 목록이 있는 개체 가져오기
파일 목록을 반복합니다.

개체 DirectoryStream<Path>에는 두 가지 속성이 있습니다. 첫째, 파일 경로를 반환하는 반복자가 있으며 for-each루프 내에서 이 객체를 사용할 수 있습니다.

둘째, 이 개체는 데이터 스트림이므로 메서드를 사용하여 명시적으로 닫히 close()거나 블록 내에서 사용을 선언 해야 합니다 try-with-resources.



7. Files.newInputStream방법

Java 5부터 FileInputStreamFileOutputStream클래스는 더 이상 사용되지 않습니다. 그들의 단점 중 하나는 이러한 클래스의 객체가 생성되면 디스크에 파일이 즉시 생성된다는 것입니다. 그리고 파일 생성과 관련된 모든 예외가 잠재적으로 발생할 수 있습니다.

나중에 이것은 최선의 결정이 아닌 것으로 인식되었습니다. java.nio.Files따라서 유틸리티 클래스의 메소드를 사용하여 파일 객체를 생성하는 것이 좋습니다 .

다음은 파일 생성에 대한 이전 접근 방식과 새로운 접근 방식을 비교한 것입니다.

전에
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
후에
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

그리고 비슷한 대체품이 있습니다 FileOutputStream.

전에
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
후에
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );