好的,我有一些pdf需要通过base64encoder转换为base64。
最后,我使用解码器将其转换回pdf格式,但是我的内容丢失了。
我的代码:
byte[] input_file = Files.readAllBytes(Paths.get("C:\\user\\Desktop\\dir1\\dir2\\test3.pdf"));
byte[] encodedBytes = Base64.getEncoder().encode(input_file);
String pdfInBase64 = new String(encodedBytes);
String originalString = new String(Base64.getDecoder().decode(encodedBytes));
System.out.println("originalString : " + originalString);
FileOutputStream fos = new FileOutputStream("C:\\user\\Desktop\\dir1\\dir2\\newtest3.pdf");
fos.write(originalString.getBytes());
fos.flush();
fos.close();
结果:
编码:https://pastebin.com/fnMACZzH
谢谢
答案 0 :(得分:8)
您可以解码base64编码的String并将该byte[]
传递给FileOutputStream
写方法来解决此问题。
String filePath = "C:\\Users\\xyz\\Desktop\\";
String originalFileName = "96172560100_copy2.pdf";
String newFileName = "test.pdf";
byte[] input_file = Files.readAllBytes(Paths.get(filePath+originalFileName));
byte[] encodedBytes = Base64.getEncoder().encode(input_file);
String encodedString = new String(encodedBytes);
byte[] decodedBytes = Base64.getDecoder().decode(encodedString.getBytes());
FileOutputStream fos = new FileOutputStream(filePath+newFileName);
fos.write(decodedBytes);
fos.flush();
fos.close();
答案 1 :(得分:2)
if (resultCode == RESULT_OK) {
InputStream is = null;
try
{
is = getContentResolver().openInputStream(imageReturnedIntent.getData());
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
byte[] bytesArray = new byte[0];
try {
bytesArray = new byte[is.available()];
}
catch (IOException e) {
e.printStackTrace();
}
try
{
is.read(bytesArray);
String d = Base64.encodeToString(bytesArray, android.util.Base64.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
}
答案 2 :(得分:1)
我使用了Apache Commons库。我用于测试该实用程序的版本是commons-code-1.4.jar。 Base64编解码器有多种用途。我需要做的是在Docusign eSignature网络服务调用期间,以附加的文件以Base64编码格式发送。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.codec.binary.Base64;
public class FileCodecBase64 {
private static final boolean IS_CHUNKED = true;
public static void main(String args[]) throws Exception {
/* Encode a file and write the encoded output to a text file. */
encode("C:/temp/something.pdf", "c:/temp/something-encoded.txt", IS_CHUNKED);
/* Decode a file and write the decoded file to file system */
decode("C:/temp/something-encoded.txt", "c:/temp/something-decoded.pdf");
}
/**
* This method converts the content of a source file into Base64 encoded data and saves that to a target file.
* If isChunked parameter is set to true, there is a hard wrap of the output encoded text.
*/
private static void encode(String sourceFile, String targetFile, boolean isChunked) throws Exception {
byte[] base64EncodedData = Base64.encodeBase64(loadFileAsBytesArray(sourceFile), isChunked);
writeByteArraysToFile(targetFile, base64EncodedData);
}
public static void decode(String sourceFile, String targetFile) throws Exception {
byte[] decodedBytes = Base64.decodeBase64(loadFileAsBytesArray(sourceFile));
writeByteArraysToFile(targetFile, decodedBytes);
}
/**
* This method loads a file from file system and returns the byte array of the content.
*
* @param fileName
* @return
* @throws Exception
*/
public static byte[] loadFileAsBytesArray(String fileName) throws Exception {
File file = new File(fileName);
int length = (int) file.length();
BufferedInputStream reader = new BufferedInputStream(new FileInputStream(file));
byte[] bytes = new byte[length];
reader.read(bytes, 0, length);
reader.close();
return bytes;
}
/**
* This method writes byte array content into a file.
*
* @param fileName
* @param content
* @throws IOException
*/
public static void writeByteArraysToFile(String fileName, byte[] content) throws IOException {
File file = new File(fileName);
BufferedOutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
writer.write(content);
writer.flush();
writer.close();
}
}
我希望这项工作
答案 3 :(得分:1)
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
public class Base64Sample {
public static void main(String... strings) throws Exception {
String filePath = "/home/user/sample.pdf";
File pdfFile = new File(filePath);
byte[] encoded = Files.readAllBytes(Paths.get(pdfFile.getAbsolutePath()));
Base64.Encoder enc = Base64.getEncoder();
byte[] strenc = enc.encode(encoded);
String encode = new String(strenc, "UTF-8");
Base64.Decoder dec = Base64.getDecoder();
byte[] strdec = dec.decode(encode);
OutputStream out = new FileOutputStream("/home/user/out.pdf");
out.write(strdec);
out.close();
}
}
答案 4 :(得分:0)
我尝试了很多代码,然后在尝试了以下代码及其对我的工作之后。 此代码适用于其他文件,例如 .png、.jpg、jpeg、.pdf 和 .doc 等...
String base64 = Base64.encodeToString(getBytesFromUri(uri, requireContext()), Base64.NO_WRAP);
public static byte[] getBytesFromUri(Uri uri, Context context) throws IOException {
InputStream iStream = context.getContentResolver().openInputStream(uri);
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = iStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
希望对你有帮助!