base 64 解码并写入 doc 文件

Sum*_*nth 2 java base64 filewriter apache-poi

我有一个 base64 编码的 String 。看起来像这样

UEsDBBQABgAIAAAAIQDhD46/jQEAACkGAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA .
Run Code Online (Sandbox Code Playgroud)

我解码了字符串并使用FileWriter. 但是当我尝试打开 doc 文件时,我收到一条错误消息,指出数据损坏。

我想知道在解码数据后将内容写入word文档需要遵循哪些步骤。下面是我所做的和出错的代码。

     byte[] encodedBytes = stringBase64.getBytes();
     byte[] decodedBytes = Base64.decodeBase64(encodedBytes);
     String decodeString = new String(decodedBytes);
     filewriter = new java.io.FileWriter("F:\xxx.docx”);
     BufferedWriter bw = new BufferedWriter(fw);
     bw.write(decodeString);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

解码后的数据不是纯文本数据——它只是二进制数据。所以用 a 来写FileStream,而不是 a FileWriter

// If your Base64 class doesn't have a decode method taking a string,
// find a better one!
byte[] decodedBytes = Base64.decodeBase64(stringBase64);
// Note the try-with-resources block here, to close the stream automatically
try (OutputStream stream = new FileOutputStream("F:\\xxx.doc")) {
    stream.write(decodedBytes);
}
Run Code Online (Sandbox Code Playgroud)

或者甚至更好:

byte[] decodedBytes = Base64.decodeBase64(stringBase64);
Files.write(Paths.get("F:\\xxx.doc"), decodedBytes);
Run Code Online (Sandbox Code Playgroud)