Java:将输入流字符串转换为文件

问题描述 投票:0回答:1

我正在尝试将字符串(从输入流读取)写入文件。 但是当生成output.pdf文件时,它就被损坏了。

在现实场景中,我从另一个服务接收一个字符串作为输入,我需要从中创建一个文件。 因此,创建了如下测试代码

import org.apache.commons.io.IOUtils;
import org.apache.commons.io.FileUtils;


File inFile = new File("test_input.pdf");
File outFile = new File("output.pdf");
InputStream inputStream = FileUtils.openInputStream(inFile);

// this String looks like:
// %PDF-1.4 ....

String s = IOUtils.toString(inputStream);

// Aim is to write the generated string as another file
// This is generating a corrupted file
FileUtils.writeByteArrayToFile(outFile, IOUtils.toByteArray(s));
java file inputstream fileutils ioutils
1个回答
0
投票

假设您的InputStream具有有效PDF文件的内容,您需要的是:

    Path outFile = Path.of("output.pdf");
    try (InputStream inputStream = Files.newInputStream(Path.of("test_input.pdf"))) {
        Files.copy(inputStream, outFile);
    }

这些类和方法都是标准的Java API。无需使用任何第三方库,例如Apache。

您遇到的问题可能是由于将输入流中的字节解码为字符串,然后将字符串编码为写入文件的字节引起的。这通常不是无损转换,尤其是当内容是非 ASCII 文本时。另一方面,

Files.copy
直接传输内容。

© www.soinside.com 2019 - 2024. All rights reserved.