1. 개요
이 빠른 자습서에서는 Java 바이트 배열을 파일에 쓰는 여러 가지 방법을 배웁니다. Java IO 패키지를 사용하여 처음부터 시작하겠습니다. 다음으로 Java NIO를 사용한 예제를 살펴 보겠습니다. 그 후 Google Guava 및 Apache Commons IO를 사용합니다.
2. 자바 IO
Java의 IO 패키지는 JDK 1.0부터 사용되었으며 데이터 읽기 및 쓰기를위한 클래스 및 인터페이스 모음을 제공합니다.
FileOutputStream 을 사용 하여 이미지를 파일에 씁니다.
File outputFile = tempFolder.newFile("outputFile.jpg");
try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
outputStream.write(dataForWriting);
}
대상 파일에 대한 출력 스트림을 열고 byte [] dataForWriting 을 write 메서드에 전달 하기 만하면 됩니다 . 참고 우리가 사용하고있는 시도 -과 - 자원 블록 우리가 닫을 수 있도록 여기 의 OutputStream을 경우 IOException가이 발생합니다.
3. 자바 NIO
Java NIO 패키지는 Java 1.4에서 도입되었으며 NIO 용 파일 시스템 API 는 Java 7에서 확장으로 도입되었습니다. Java NIO는 버퍼링을 사용하고 비 차단 방식이며 Java IO는 차단 스트림을 사용합니다. 파일 리소스를 생성하는 구문은 java.nio.file 패키지 에서 더 간결 합니다.
Files 클래스를 사용하여 byte [] 를 한 줄로 작성할 수 있습니다 .
Files.write(outputFile.toPath(), dataForWriting);
이 예에서는 파일을 만들거나 기존 파일을 잘라서 쓰기 위해 엽니 다. 우리는 또한 사용할 수 있습니다 Paths.get ( "경로 /로 / 파일") 또는 ( "파일" "을" "경로") Paths.get를 구조물에 경로 우리의 파일이 저장 될 위치를 설명합니다. 경로 는 경로를 표현하는 Java NIO 기본 방법입니다.
파일 열기 동작을 재정의해야하는 경우 쓰기 메서드에 OpenOption 을 제공 할 수도 있습니다 .
4. 구글 구아바
Guava 는 IO를 포함하여 Java에서 일반적인 작업을 수행하기위한 다양한 유형을 제공하는 Google의 라이브러리입니다.
Guava 를 pom.xml 파일 로 가져 오겠습니다 .
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
</dependency>
4.1. 구아바 파일
Java NIO 패키지와 마찬가지로 byte [] 를 한 줄로 작성할 수 있습니다 .
Files.write(dataForWriting, outputFile);
Guava의 Files.write 메소드는 선택적인 OptionOptions 도 취하고 java.nio.Files.write 와 동일한 기본값을 사용합니다 .
하지만 여기에 문제가 있습니다. Guava Files.write 메서드는 @Beta 어노테이션으로 표시됩니다 . 문서에 따르면 언제든지 변경 될 수 있으므로 라이브러리에서 사용하지 않는 것이 좋습니다.
따라서 라이브러리 프로젝트를 작성하는 경우 ByteSink 사용을 고려해야 합니다.
4.2. 바이트 싱크
byte [] 를 작성하기 위해 ByteSink 를 만들 수도 있습니다 .
ByteSink byteSink = Files.asByteSink(outputFile);
byteSink.write(dataForWriting);
ByteSink은 우리가 바이트를 기록 할 수있는 할 수있는 곳입니다. 그것은 공급 의 OutputStream를 대상으로.
우리가 사용해야하는 경우 java.nio.files.Path을 하거나 특별 공급 OpenOption을 , 우리는 우리 얻을 수 ByteSink 은 Using MoreFiles의 클래스를 :
ByteSink byteSink = MoreFiles.asByteSink(outputFile.toPath(),
StandardOpenOption.CREATE,
StandardOpenOption.WRITE);
byteSink.write(dataForWriting);
5. Apache Commons IO
Apache Commons IO 는 몇 가지 일반적인 파일 작업을 제공합니다.
최신 버전의 commons-io를 가져옵니다 .
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
이제 FileUtils 클래스를 사용하여 byte [] 를 작성해 보겠습니다 .
FileUtils.writeByteArrayToFile(outputFile, dataForWriting);
FileUtils.writeByteArrayToFile의 방법은 우리가 그것을 제공하는 것이 우리가 사용했던 것을 다른 방법과 유사 파일 우리의 원하는 대상을 나타내는 및 이진 데이터 우린 쓰기. 대상 파일 또는 상위 디렉터리가 없으면 생성됩니다.
6. 결론
이 짧은 튜토리얼에서는 일반 Java와 두 개의 인기있는 Java 유틸리티 라이브러리 인 Google Guava 및 Apache Commons IO를 사용하여 byte []의 바이너리 데이터를 파일에 쓰는 방법을 배웠습니다 .