У меня строка с кодировкой base64. Что выглядит так
UEsDBBQABgAIAAAAIQDhD46/jQEAACkGAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA .
Я декодирую строку String и записываю ее в текстовый файл с помощью FileWriter
. Но когда я попытался открыть файл doc, я получаю сообщение об поврежденных данных.
Я хотел бы знать, каковы шаги, которые мне нужно выполнить, чтобы записать содержимое в текстовый документ после декодирования данных. ниже - код, который я сделал, и поступил не так.
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);
Декодированные данные не являются текстовыми данными - это просто двоичные данные. Поэтому напишите его с помощью FileStream
, а не 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);
}
Или еще лучше:
byte[] decodedBytes = Base64.decodeBase64(stringBase64);
Files.write(Paths.get("F:\\xxx.doc"), decodedBytes);
Пожалуйста, смотрите.
byte[] encodedBytes = /* your encoded bytes*/
// Decode data on other side, by processing encoded data
byte[] decodedBytes= Base64.decodeBase64(encodedBytes );
String yourValue=new String(decodedBytes);
System.out.println("Decoded String is " + yourValue);
Теперь вы можете записать эту строку в файл и прочитать дальше.