使用jdk的base工具类操作
代码如下,对本地的文件进行读取并转码
package org.jeecg.modules.fsmService.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.*;
public class Base64FileUtil {
public static String targetFilePath = "D:\\opt\\upFiles\\activity扩展字段_1636114837738.json";
public static String targetFilePath0 = "D:/opt/upFiles/activity扩展字段_1636114837738.json";
public static String targetFilePath2 = "D:\\opt\\upFiles\\activity扩展字段_1636114837738_bak.json";
public static final String FILE_SEPARATOR = System.getProperty("file.separator");
public static void main(String[] args) throws Exception {
// String originalFilename = "华创_FSM扩展平台_接口清单V2.0.xlsx";
// String firstName = originalFilename.substring(0, originalFilename.lastIndexOf("."));
// String lastName = originalFilename.substring(originalFilename.lastIndexOf("."));
// System.out.println(firstName);
// System.out.println(lastName);
// System.out.println(File.separator);
// System.out.println(targetFilePath);
// String rename = getRealFilePath(targetFilePath);
// System.out.println(rename);
// System.out.println(targetFilePath0);
// String rename2 = getRealFilePath(targetFilePath0);
// System.out.println(rename2);
// String fileStr = readFileByPath(rename);
// System.out.println(fileStr);
// String base64Str = getFileBase64Str(targetFilePath);
// System.out.println("base64Str ===\n" + base64Str);
// System.out.println("base64Str length===" + base64Str.length());
//
// System.out.println(generateFile(base64Str, targetFilePath2));
// System.out.println("end");
String targetFilePath2 = "D:\\opt\\upFiles\\表单.txt";
String base64Str = "Jm5ic3A7PHRhYmxlIGlkPSJmZF8zOWNiNjhmZWE0ODk1OCIgZm9ybWRlc2lnbj0ibGFuZHJheSIgYWxpZ249ImNlbnRlciIgY2xhc3M9InRiX25vcm1hbCIgc3R5bGU9IndpZHRoOiA5OCU7IiBsYXlvdXQyY29sPSJ1bmRlZmluZWQiIGZkX3ZhbHVlcz0ie2lkOiZxdW90O2ZkXzM5Y2I2OGZlYTQ4OTU4JnF1b3Q7LGxhYmVsOiZxdW90O+S4u+ihqCZxdW90Oyxpc0RlZmF1bHQ6JnF1b3Q7dHJ1ZSZxdW90O30iIGZkX3R5cGU9InN0YW5kYXJkVGFibGUiPjx0Ym9keT48dHI+PHRkIHJvdz0iMCIgY29sdW1uPSIwLDEsMiwzIiBjbGFzcz0idGRfbm9ybWFsX3RpdGxlIiBzdHlsZT0id2lkdGg6IGF1dG87IiBjb2xzcGFuPSI0IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iOTcxIj48bGFiZWwgZm9ybWRlc2lnbj0ibGFuZHJheSIgY2xhc3M9Inhmb3JtX2xhYmVsIiBpc2hpZGRlbmlubW9iaWxlPSJmYWxzZSIgbGluZT0ibm9ybWFsIiBmZF92YWx1ZXM9IntpZDomcXVvdDtmZF8zOWNiNmQ5ZjZmYmEwMiZxdW90Oyxjb250ZW50OiZxdW90O+ihqOWNleWFg+e0oCZxdW90Oyxmb250OiZxdW90OyZxdW90OyxzaXplOiZxdW90OzE4cHgmcXVvdDssY29sb3I6JnF1b3Q7IzAwMCZxdW90OyxsaW5lOiZxdW90O25vcm1hbCZxdW90OyxlZmZlY3Q6JnF1b3Q7JnF1b3Q7LGI6JnF1b3Q7dHJ1ZSZxdW90OyxpOiZxdW90O2ZhbHNlJnF1b3Q7LHVuZGVybGluZTomcXVvdDtmYWxzZSZxdW90Oyxpc0hpZGRlbkluTW9iaWxlOiZxdW90O2ZhbHNlJnF1b3Q7fSIgZmRfdHlwZT0idGV4dExhYmVsIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDE4cHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtd2VpZ2h0OiBib2xkOyB3aWR0aDogYXV0bzsgd29yZC1icmVhazogYnJlYWstYWxsOyBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOyI+6KGo5Y2V5YWD57SgPC9sYWJlbD48L3RkPjwvdHI+PHRyPjx0ZCByb3c9IjEiIGNvbHVtbj0iMCIgY2xhc3M9InRkX25vcm1hbF90aXRsZSIgd2lkdGg9IjMzIiBzdHlsZT0id2lkdGg6IDE2NS41NjJweDsiPjxsYWJlbCBmb3JtZGVzaWduPSJsYW5kcmF5IiBjbGFzcz0ieGZvcm1fbGFiZWwiIGlzaGlkZGVuaW5tb2JpbGU9ImZhbHNlIiBsaW5lPSJub3JtYWwiIGZkX3ZhbHVlcz0ie2lkOiZxdW90O2ZkXzM5Y2I2OTAzZTVhY2MyJnF1b3Q7LGNvbnRlbnQ6JnF1b3Q75paH5pysLeWtl+espiZxdW90Oyxmb250OiZxdW90OyZxdW90OyxzaXplOiZxdW90OyZxdW90Oyxjb2xvcjomcXVvdDsjMDAwJnF1b3Q7LGxpbmU6JnF1b3Q7bm9ybWFsJnF1b3Q7LGVmZmVjdDomcXVvdDsmcXVvdDssYjomcXVvdDtmYWxzZSZxdW90OyxpOiZxdW90O2ZhbHNlJnF1b3Q7LHVuZGVybGluZTomcXVvdDtmYWxzZSZxdW90Oyxpc0hpZGRlbkluTW9iaWxlOiZxdW90O2ZhbHNlJnF1b3Q7fSIgZmRfdHlwZT0idGV4dExhYmVsIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBjb2xvcjogcmdiKDAsIDAsIDApOyB3aWR0aDogYXV0bzsgd29yZC1icmVhazogYnJlYWstYWxsOyBvdmVyZmxvdy13";
System.out.println(generateFile(base64Str, targetFilePath2));
}
public static String getRealFilePath(String path) {
return path.replace("/", FILE_SEPARATOR).replace("\\", FILE_SEPARATOR);
}
//使用lastIndexOf()结合subString()获取后缀名
public static String getLastName(String fileName){
if(fileName.lastIndexOf(".")==-1){
return "";//文件没有后缀名的情况
}
//此时返回的是带有 . 的后缀名,
return fileName.substring(fileName.lastIndexOf("."));
}
/**
* 根据文件全路径读取文件内容返回字符串
*
* @param fullFilePath 文件全路径
*/
public static String readFileByPath(String fullFilePath) {
StringBuilder result = new StringBuilder();
try {
File file = new File(fullFilePath);
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
/**
* 文件转化成base64字符串 将文件转化为字节数组字符串,并对其进行Base64编码处理
*
* @param filePath 文件全路径
*/
public static String getFileBase64Str(String filePath) {
InputStream in = null;
byte[] data = null;
// 读取文件字节数组
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();
}
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
// 返回 Base64 编码过的字节数组字符串
return encoder.encode(data);
}
/**
* base64字符串转化成文件,可以是JPEG、PNG、TXT和AVI等等
*
* @param base64FileStr
* @param filePath
* @return
* @throws Exception
*/
public static boolean generateFile(String base64FileStr, String filePath) throws Exception {
// 数据为空
if (base64FileStr == null) {
System.out.println("参数为空");
return false;
}
BASE64Decoder decoder = new BASE64Decoder();
// Base64解码,对字节数组字符串进行Base64解码并生成文件
byte[] byt = decoder.decodeBuffer(base64FileStr);
for (int i = 0, len = byt.length; i < len; ++i) {
// 调整异常数据
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;
}
}