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 프로젝트 에서 찾을 수 있습니다  .

Junit footer banner