需要导入sun.misc.BASE64Decoder.jar包
Base64ToImage.java
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class Base64ToImage {
// 替换字符串
public String changeStr(String oldStr, String newStr, String str) {
return str.replace(oldStr, newStr);
}
/**
*
* @功能:创建一个目录,并在此目录下生成图片
* @时间:2017年3月7日 下午8:38:21
* @param path 原Base64字符串存放的目录
* @param targetPath 生成图片的父目录
* @param dirName 生成图片的目录名
* @throws IOException
*/
public void readStrToImg(String path,String targetPath,String dirName){
File file = new File(path);
// 目标目录
File targetFile=new File(targetPath+"\\"+dirName);
// 创建一个名称为dirName的目录
targetFile.mkdir();
targetPath=targetPath+"\\"+dirName;
File[] array = file.listFiles();
for (int i = 0; i < array.length; i++) {
if (array[i].isFile()) {
// 去掉txt文件的扩展名,值得到文件名
String fileName=array[i].getName().substring(0, array[i].getName().length()-3);
// 新建一个文件,用来存储Base64字符串,并且文件的名称要与图片的名称一致
try {
GenerateImage(readStr(array[i].getPath()),targetPath,fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("完成!");
}
/**
*
* @功能:根据路径,读取文件的内容,返回字符串
* @时间:2017年3月7日 下午8:44:02
* @param path 这个文件的路径
* @return
* @throws IOException
*/
public String readStr(String path) throws IOException{
InputStream is=new FileInputStream(path);
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String str="";
int flag=0;
br.mark(flag);
while(br.ready()){
br.reset();
str+=br.readLine();
br.mark(flag);
}
br.close();
isr.close();
is.close();
return changeStr("/","*",str);
}
//base64字符串转化成图片
public boolean GenerateImage(String imgStr,String targetPath,String imageName)
{ //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
return false;
Decoder.BASE64Decoder decoder = new Decoder.BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = targetPath+"\\"+imageName;//新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
}
catch (Exception e)
{
return false;
}
}
}
ImageToBase64 .java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class ImageToBase64
{
// 替换字符串
public String changeStr(String oldStr, String newStr, String str) {
return str.replace(oldStr, newStr);
}
/**
*
* @功能:创建一个目录,并且在此目录下创建生成的Base64码的文件
* @时间:2017年3月7日 下午6:27:48
* @param path 图片的路径
* @param targetPath Base64字符串存放的路径
* @param dirName 存放Base64字符串的文件的名称
*/
public void writeStrToFile(String path,String targetPath,String dirName) {
File file = new File(path);
// 目标目录
File targetFile=new File(targetPath+"\\"+dirName);
// 创建一个名称为dirName的目录
targetFile.mkdir();
File[] array = file.listFiles();
for (int i = 0; i < array.length; i++) {
if (array[i].isFile()) {
// 新建一个文件,用来存储Base64字符串,并且文件的名称要与图片的名称一致
writeStr(GetImageStr(array[i].getPath()),targetFile+"\\"+array[i].getName()+".txt");
}
}
System.out.println("完成!");
}
/**
*
* @功能:将base64编码写入到txt文件中
* @时间:2017年3月7日 下午6:46:20
* @param path
* @param str
*/
public void writeStr(String imageStr,String targetPath){
String imgFilePath = targetPath;//新生成的图片
byte[] bytes=imageStr.getBytes();
OutputStream out = null;
try {
out = new FileOutputStream(imgFilePath);
out.write(bytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @功能:图片转化成base64字符串
* @时间:2017年3月7日 下午8:37:35
* @param path
* @return
*/
public String GetImageStr(String path)
{//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try
{
in = new FileInputStream(path);
data = new byte[in.available()];
in.read(data);
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//对字节数组Base64编码
Decoder.BASE64Encoder encoder = new Decoder.BASE64Encoder();
return changeStr("/","*",encoder.encode(data));//将编码中/全部替换成*后返回Base64编码过的字节数组字符串
}
}
Test.java
import java.util.Scanner;
import sjj.base64.Base64ToImage;
import sjj.base64.ImageToBase64;
public class Test {
public static void main(String[] args) {
String path="";
String targetPath="";
String fileName="";
int flag=0;
System.out.println("1.图片转化为字符串\r\n2.字符串转化为图片");
Scanner scan=new Scanner(System.in);
flag=scan.nextInt();
if(flag==1){
ImageToBase64 itb=new ImageToBase64();
System.out.println("输入源图片的路径:");
path=scan.next();
System.out.println("输入字符串存放的路径:");
targetPath=scan.next();
System.out.println("输入存放字符串的目录的名称:");
fileName=scan.next();
itb.writeStrToFile(path, targetPath, fileName);
}else if(flag==2){
Base64ToImage bti=new Base64ToImage();
System.out.println("输入源字符串的路径:");
path=scan.next();
System.out.println("输入图片存放的路径:");
targetPath=scan.next();
System.out.println("输入存放图片的目录的名称:");
fileName=scan.next();
bti.readStrToImg(path, targetPath, fileName);
}else{
System.out.println("程序结束!");
}
}
}