我正在尝试将字符串(从输入流读取)写入文件。 但是当生成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));
假设您的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
直接传输内容。