1. 개요
이 빠른 사용방법(예제)에서는 InputStream 을 파일 에 쓰는 방법을 설명합니다. 먼저 일반 Java를 사용한 다음 Guava를 사용하고 마지막으로 Apache Commons IO 라이브러리를 사용합니다.
이 기사는 여기 Baeldung 에 있는 " Java – Back to Basic " 예제의 일부입니다.
2. 일반 Java를 사용하여 변환
Java 솔루션 부터 시작하겠습니다 .
@Test
public void whenConvertingToFile_thenCorrect() throws IOException {
Path path = Paths.get("src/test/resources/sample.txt");
byte[] buffer = java.nio.file.Files.readAllBytes(path);
File targetFile = new File("src/test/resources/targetFile.tmp");
OutputStream outStream = new FileOutputStream(targetFile);
outStream.write(buffer);
IOUtils.closeQuietly(outStream);
}
이 예에서 입력 스트림에는 디스크의 파일 또는 메모리 내 스트림과 같은 알려진 미리 결정된 데이터가 있습니다. 이 때문에 경계 검사를 수행할 필요가 없으며 메모리가 허용하는 경우 한 번에 읽고 쓸 수 있습니다.
입력 스트림이 진행 중인 데이터 스트림에 연결되어 있는 경우(예: 진행 중인 연결에서 오는 HTTP 응답) 전체 스트림을 한 번 읽는 것은 옵션이 아닙니다. 이 경우 스트림 끝에 도달할 때까지 계속 읽어야 합니다 .
@Test
public void whenConvertingInProgressToFile_thenCorrect()
throws IOException {
InputStream initialStream = new FileInputStream(
new File("src/main/resources/sample.txt"));
File targetFile = new File("src/main/resources/targetFile.tmp");
OutputStream outStream = new FileOutputStream(targetFile);
byte[] buffer = new byte[8 * 1024];
int bytesRead;
while ((bytesRead = initialStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
IOUtils.closeQuietly(initialStream);
IOUtils.closeQuietly(outStream);
}
마지막으로 Java 8을 사용하여 동일한 작업을 수행 할 수 있는 또 다른 간단한 방법이 있습니다 .
@Test
public void whenConvertingAnInProgressInputStreamToFile_thenCorrect2()
throws IOException {
InputStream initialStream = new FileInputStream(
new File("src/main/resources/sample.txt"));
File targetFile = new File("src/main/resources/targetFile.tmp");
java.nio.file.Files.copy(
initialStream,
targetFile.toPath(),
StandardCopyOption.REPLACE_EXISTING);
IOUtils.closeQuietly(initialStream);
}
3. 구아바를 사용하여 변환
다음 – 더 간단한 Guava 기반 솔루션을 살펴보겠습니다.
@Test
public void whenConvertingInputStreamToFile_thenCorrect3()
throws IOException {
InputStream initialStream = new FileInputStream(
new File("src/main/resources/sample.txt"));
byte[] buffer = new byte[initialStream.available()];
initialStream.read(buffer);
File targetFile = new File("src/main/resources/targetFile.tmp");
Files.write(buffer, targetFile);
}
4. Commons IO를 사용하여 변환
마지막으로 Apache Commons IO를 사용하는 더욱 빠른 솔루션:
@Test
public void whenConvertingInputStreamToFile_thenCorrect4()
throws IOException {
InputStream initialStream = FileUtils.openInputStream
(new File("src/main/resources/sample.txt"));
File targetFile = new File("src/main/resources/targetFile.tmp");
FileUtils.copyInputStreamToFile(initialStream, targetFile);
}
InputStream 을 파일 에 쓰는 3가지 빠른 방법이 있습니다.
이 모든 예제의 구현은 GitHub 프로젝트 에서 찾을 수 있습니다 .