【Java后端】读取文件夹中的图片转成base64编码并写入properties文件

在这里插入图片描述
如图所示,图片放在maven项目的src/test/resources/img/目录下面,main方法、工具类等在generator/目录下,生成的properties文件在src/main/resources/properties/目录下面。

Main方法

import java.util.ArrayList;
import java.util.Base64;
import java.util.List;

public class PicBase64Generator {

    // 项目在硬盘上的基础路径
    private static final String PROJECT_PATH = System.getProperty("user.dir");

    // 资源文件路径
    private static final String RESOURCES_PATH = "/src/main/resources";

    // 图片Base64字符串解析头begin部分
    private static final String HEAD_BEGIN = "data:image/";

    // 图片Base64字符串解析头end部分
    private static final String HEAD_END = ";base64,";

    public static void main(String[] args) {
        Base64.Encoder encoder = Base64.getEncoder();
        Utils utils = new Utils();
        String filePath = PROJECT_PATH + RESOURCES_PATH + "/properties/vehicle-base64.properties"; // 定义配置文件存放路径
        String picDir = "/img/vehicle/";  // 图片存放相对路径
	
        // 获取文件夹下所有图片名称
        String[] picName = utils.getFileNames(picDir); 

        if (utils.createFile(filePath)) {  // 生成properties配置文件
            List<String> data = new ArrayList<>();
            for (String pic : picName) {  // 遍历图片
                byte[] bytes = utils.getFile(picDir + pic);
                if (bytes == null) {
                    data.add(pic.split("\\.")[0] + "=" + "" + "\r\n"); // 构造配置文件内容形如:"bmw="
                } else {
                    String encodedText = encoder.encodeToString(bytes);  // 转换图片为base64编码
                    String[] array = pic.split("\\.");
                     // 构造配置文件内容形如:"bmw=data:image/png;base64,xxxxx.."
                    data.add(array[0] + "=" + HEAD_BEGIN + array[1] + HEAD_END + encodedText + "\r\n");
                }
            }

            // 将内容写入配置文件
            utils.writeFileContent(filePath, data);
        }
    }
}

Utils 工具类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class Utils {

    /**
     * 日志对象
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(Utils.class);

    /**
     * 获取目录下文件名列表
     * @param path 文件目录
     * @return 文件名列表
     */
    public String [] getFileNames(String path)
    {
        File file = new File(this.getClass().getResource(path).getPath());
        return file.list();
    }

    /**
     * 获取文件字节数据
     * @param filePath 文件路径,示例:/img/vehicle/190.png
     * @return 文件字节数据
     */
    public byte[] getFile(String filePath) {
        File f;
        try {
            f = new File(this.getClass().getResource(filePath).getPath());
        } catch (Exception e) {
            LOGGER.error(Constant.LOG_FOMAT_TYPE_TWO,
                    ErrorCode.FILE_LOAD_ERROR.getErrorCode(),
                    ErrorCode.FILE_LOAD_ERROR.getMessage(),
                    e.getMessage());
            return null;
        }

        LOGGER.info("file path: " + f.getAbsolutePath());

        Path path = Paths.get(f.getAbsolutePath());
        byte[] data;
        try {
            data = Files.readAllBytes(path);
        } catch (IOException e) {
            LOGGER.error(Constant.LOG_FOMAT_TYPE_TWO,
                    ErrorCode.FILE_LOAD_ERROR.getErrorCode(),
                    ErrorCode.FILE_LOAD_ERROR.getMessage(),
                    e.getMessage());
            return null;
        }

        return data;
    }

    /**
     * 创建文件
     * @param fileName 文件路径
     * @return true or false
     */
    public boolean createFile(String fileName){
        boolean bool = false;
        File file = new File(fileName);
        try {
            if (file.exists()) {
                file.delete();
                bool = file.createNewFile();
            } else {
                bool = file.createNewFile();
            }
        } catch (Exception e) {
            LOGGER.error(Constant.LOG_FOMAT_TYPE_TWO,
                    ErrorCode.CREATE_FILE_FAILED.getErrorCode(),
                    ErrorCode.CREATE_FILE_FAILED.getMessage(),
                    e.getMessage());
        }

        return bool;
    }

    /**
     * 写入数据到新文件
     * @param filepath 文件路径,包括文件名
     * @param data 写入数据
     */
    public void writeFileContent(String filepath, List<String> data){
        try (FileOutputStream fos = new FileOutputStream(new File(filepath));
             PrintWriter pw = new PrintWriter(fos)) {
            for (String newStr : data) {
                pw.write(newStr.toCharArray());
                pw.flush();
            }
        } catch (Exception e) {
            LOGGER.error(Constant.LOG_FOMAT_TYPE_TWO,
                    ErrorCode.FILE_WRITE_FAILED.getErrorCode(),
                    ErrorCode.FILE_WRITE_FAILED.getMessage(),
                    e.getMessage());
        }
    }
}

Properties工具类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesUtil {
    /**
     * 日志对象
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(PropertiesUtil.class);

    /**
     * 获取Properties对象
     * @param filePath 文件路径,示例:/properties/vehicle-base64.properties
     * @return Properties对象
     */
    public Properties getProperties(String filePath) {
        InputStream in = this.getClass().getResourceAsStream(filePath);
        Properties properties = new Properties();
        try {
            properties.load(in);
        } catch (IOException e) {
            LOGGER.error("[error code]{} - [msg]{}",
                    ErrorCode.FILE_LOAD_ERROR.getErrorCode(),
                    e.getMessage());
            throw BaseException.of(ErrorCode.FILE_LOAD_ERROR.of());
        }
        return properties;
    }
}

获取Poperties文件内容

PropertiesUtil propertiesUtil = new PropertiesUtil();
Properties properties = propertiesUtil.getProperties("/properties/vehicle-base64.properties");
String str = properties.getProperty(“bmw”);
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值