黑马程序员技术交流社区

标题: 【上海校区】【Java后端】读取文件夹中的图片转成base64编... [打印本页]

作者: 不二晨    时间: 2018-12-28 17:45
标题: 【上海校区】【Java后端】读取文件夹中的图片转成base64编...
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字符串解析头
    private static final String HEAD = "data:image/png;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编码
                    data.add(pic.split("\\.")[0] + "=" + HEAD + encodedText + "\r\n");  // 构造配置文件内容形如:"bmw=data:image/png;base64,xxxxx.."
                }
            }

            // 将内容写入配置文件
            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”);
---------------------
转载,仅作分享,侵删
作者:咸煌
原文:https://blog.csdn.net/qq_21084687/article/details/85157452



作者: 不二晨    时间: 2019-1-3 10:10
奈斯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2