基于Java實(shí)現(xiàn)文件和base64字符串轉(zhuǎn)換
這篇文章主要介紹了基于Java實(shí)現(xiàn)文件和base64字符串轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
項(xiàng)目中遇到需要將圖片轉(zhuǎn)成base64編碼的字符串的需求,但是,考慮到擴(kuò)展性,寫(xiě)了一個(gè)可以轉(zhuǎn)換任務(wù)類(lèi)型文件的方法。需要引入的包:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.13</version>
</dependency>
源碼如下:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.*;
public class Base64FileUtil {
private static String targetFilePath = "E:\\base2Img\\target\\test.txt";
public static void main(String[] args) throws Exception {
String fileStr = getFileStr("E:\\base2Img\\big test.txt");
System.out.println("fileStr ===" + fileStr);
System.out.println(generateFile(fileStr, targetFilePath));
System.out.println("end");
}
/**
* 文件轉(zhuǎn)化成base64字符串
* 將文件轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對(duì)其進(jìn)行Base64編碼處理
*/
public static String getFileStr(String filePath) {
InputStream in = null;
byte[] data = null;
// 讀取文件字節(jié)數(shù)組
try {
in = new FileInputStream(filePath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 對(duì)字節(jié)數(shù)組Base64編碼
BASE64Encoder encoder = new BASE64Encoder();
// 返回 Base64 編碼過(guò)的字節(jié)數(shù)組字符串
return encoder.encode(data);
}
/**
* base64字符串轉(zhuǎn)化成文件,可以是JPEG、PNG、TXT和AVI等等
*
* @param base64FileStr
* @param filePath
* @return
* @throws Exception
*/
public static boolean generateFile(String base64FileStr, String filePath) throws Exception {
// 數(shù)據(jù)為空
if (base64FileStr == null) {
System.out.println(" 不行,oops! ");
return false;
}
BASE64Decoder decoder = new BASE64Decoder();
// Base64解碼,對(duì)字節(jié)數(shù)組字符串進(jìn)行Base64解碼并生成文件
byte[] byt = decoder.decodeBuffer(base64FileStr);
for (int i = 0, len = byt.length; i < len; ++i) {
// 調(diào)整異常數(shù)據(jù)
if (byt[i] < 0) {
byt[i] += 256;
}
}
OutputStream out = null;
InputStream input = new ByteArrayInputStream(byt);
try {
// 生成指定格式的文件
out = new FileOutputStream(filePath);
byte[] buff = new byte[1024];
int len = 0;
while ((len = input.read(buff)) != -1) {
out.write(buff, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
out.flush();
out.close();
}
return true;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java開(kāi)發(fā)反射機(jī)制的實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié)
反射是java中一種強(qiáng)大的工具,能夠使我們很方便的創(chuàng)建靈活的代碼,這些代碼可以再運(yùn)行時(shí)裝配,無(wú)需在組件之間進(jìn)行源代碼鏈接,但是反射使用不當(dāng)會(huì)成本很高,這篇文章主要給大家介紹了關(guān)于Java開(kāi)發(fā)反射機(jī)制的相關(guān)資料,需要的朋友可以參考下2021-07-07
Spring boot 實(shí)現(xiàn)單個(gè)或批量文件上傳功能
這篇文章主要介紹了Spring boot 實(shí)現(xiàn)單個(gè)或批量文件上傳功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-08-08
java7 簡(jiǎn)化變參方法調(diào)用實(shí)例方法
在本篇文章里我們給大家整理的是關(guān)于java7 簡(jiǎn)化變參方法調(diào)用實(shí)例方法以及實(shí)例代碼,需要的朋友們學(xué)習(xí)下。2019-11-11
Java日期工具類(lèi)時(shí)間校驗(yàn)實(shí)現(xiàn)
一般項(xiàng)目中需要對(duì)入?yún)⑦M(jìn)行校驗(yàn),比如必須是一個(gè)合法的日期,本文就來(lái)介紹一下Java日期工具類(lèi)時(shí)間校驗(yàn)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
Java16 JDK安裝并設(shè)置環(huán)境變量的方法步驟
突然想起自己大學(xué)剛接觸java的時(shí)候,要下載JDK和配置環(huán)境變量,那時(shí)候我上網(wǎng)找了很多教學(xué),本文就詳細(xì)的介紹一下Java16 JDK安裝并設(shè)置環(huán)境變量,感興趣的可以了解一下2021-09-09
java實(shí)現(xiàn)簡(jiǎn)易超市管理系統(tǒng) 附源碼下載
這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)易超市管理系統(tǒng)(含源碼),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Java編程實(shí)現(xiàn)二項(xiàng)分布的采樣或抽樣實(shí)例代碼
這篇文章主要介紹了Java編程實(shí)現(xiàn)二項(xiàng)分布的采樣或抽樣實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01

