zoukankan      html  css  js  c++  java
  • 文件编码相关的一些工具函数

    package com.opslab.util.algorithmImpl;

    import com.opslab.util.FileUtil;
    import com.opslab.util.CheckUtil;

    import java.io.*;
    import java.nio.charset.Charset;
    import java.nio.charset.UnsupportedCharsetException;
    import java.util.List;

    /**
    * 文件编码相关的一些工具函数
    */
    public class FileEncodingUtil {
    /**
    * 把指定文件或目录转换成指定的编码
    *
    * @param fileName 要转换的文件
    * @param fromCharsetName 源文件的编码
    * @param toCharsetName 要转换的编码
    */
    public static void convert(String fileName, String fromCharsetName, String toCharsetName) {
    convert(new File(fileName), fromCharsetName, toCharsetName, null);
    }

    /**
    * 把指定文件或目录转换成指定的编码
    *
    * @param file 要转换的文件或目录
    * @param fromCharsetName 源文件的编码
    * @param toCharsetName 要转换的编码
    */
    public static void convert(File file, String fromCharsetName, String toCharsetName) {
    convert(file, fromCharsetName, toCharsetName, null);
    }

    /**
    * 把指定文件或目录转换成指定的编码
    *
    * @param fileName 要转换的文件或目录
    * @param fromCharsetName 源文件的编码
    * @param toCharsetName 要转换的编码
    * @param filter 文件名过滤器
    */
    public static void convert(String fileName, String fromCharsetName, String toCharsetName, FilenameFilter filter) {
    convert(new File(fileName), fromCharsetName, toCharsetName, filter);
    }

    /**
    * 把指定文件或目录转换成指定的编码
    *
    * @param file 要转换的文件或目录
    * @param fromCharsetName 源文件的编码
    * @param toCharsetName 要转换的编码
    * @param filter 文件名过滤器
    */
    public static void convert(File file, String fromCharsetName, String toCharsetName, FilenameFilter filter) {
    if (file.isDirectory()) {
    List<File> list = CheckUtil.valid(filter) ? FileUtil.listFileFilter(file, filter) :
    FileUtil.listFile(file);
    if (CheckUtil.valid(list)) {
    for (File f : list) {
    convert(f, fromCharsetName, toCharsetName, filter);
    }
    }
    } else {
    if (filter == null || filter.accept(file.getParentFile(), file.getName())) {
    String fileContent = getFileContentFromCharset(file, fromCharsetName);
    saveFile2Charset(file, toCharsetName, fileContent);
    }
    }
    }

    /**
    * 以指定编码方式读取文件,返回文件内容
    *
    * @param file 要转换的文件
    * @param fromCharsetName 源文件的编码
    */
    public static String getFileContentFromCharset(File file, String fromCharsetName) {
    String str = "";
    if (!Charset.isSupported(fromCharsetName)) {
    throw new UnsupportedCharsetException(fromCharsetName);
    }
    try (InputStream inputStream = new FileInputStream(file);
    InputStreamReader reader = new InputStreamReader(inputStream, fromCharsetName)
    ) {
    char[] chs = new char[(int) file.length()];
    reader.read(chs);
    str = new String(chs).trim();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return str;
    }

    /**
    * 以指定编码方式写文本文件,存在会覆盖
    *
    * @param file 要写入的文件
    * @param toCharsetName 要转换的编码
    * @param content 文件内容
    */
    public static void saveFile2Charset(File file, String toCharsetName, String content) {
    if (!Charset.isSupported(toCharsetName)) {
    throw new UnsupportedCharsetException(toCharsetName);
    }
    try (
    OutputStream outputStream = new FileOutputStream(file);
    OutputStreamWriter outWrite = new OutputStreamWriter(outputStream, toCharsetName)
    ) {
    outWrite.write(content);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

  • 相关阅读:
    VS生成事件时复制文件到指定位置
    Windows服务BAT命令-安装、卸载、启动、停止
    Lambda表达式动态组装查询条件
    动软模板使用流程
    使用jquery.qrcode生成二维码
    MySQL报错:Packets larger than max_allowed_packet are not all
    Excel操作之VLOOKUP函数
    Visual Studio 编辑器打开项目后,一直提醒Vs在忙,解决方法
    使用BaiDu Java Script Web Api 在Web开发中嵌入地图使用步骤
    C#或Net连接Oracle操作提示 Oracle 客户端 version 8.1.7 或更高版本报错
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10254634.html
Copyright © 2011-2022 走看看