• 2018-03-21 11:34:44 java脚本批量转换java utf-8 bom源码文件为utf-8编码文件


    package com.springbootdubbo;

    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;

    /**
    *@title : JavaClass
    *@author:zyh
    *@createDate:2018/11/19 18:30
    *
    **/
    public class UTF8BOMConverter extends Reader {

    PushbackInputStream internalIn;

    InputStreamReader internalIn2 = null;

    String defaultEnc;

    private static final int BOM_SIZE = 4;


    /**

    * @param in inputstream to be read

    * @param defaultEnc default encoding if stream does not have

    * BOM marker. Give NULL to use system-level default.

    */

    UTF8BOMConverter(InputStream in, String defaultEnc) {

    internalIn = new PushbackInputStream(in, BOM_SIZE);

    this.defaultEnc = defaultEnc;

    }


    public String getDefaultEncoding() {

    return defaultEnc;

    }


    /**

    * Get stream encoding or NULL if stream is uninitialized.

    * Call init() or read() method to initialize it.

    */

    public String getEncoding() {

    if (internalIn2 == null) return null;

    return internalIn2.getEncoding();

    }


    /**

    * Read-ahead four bytes and check for BOM marks. Extra bytes are

    * unread back to the stream, only BOM bytes are skipped.

    */

    protected void init() throws IOException {

    if (internalIn2 != null) return;

    String encoding;

    byte bom[] = new byte[BOM_SIZE];

    int n, unread;

    n = internalIn.read(bom, 0, bom.length);

    if ((bom[0] == (byte) 0x00) && (bom[1] == (byte) 0x00) &&

    (bom[2] == (byte) 0xFE) && (bom[3] == (byte) 0xFF)) {

    encoding = "UTF-32BE";

    unread = n - 4;

    } else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE) &&

    (bom[2] == (byte) 0x00) && (bom[3] == (byte) 0x00)) {

    encoding = "UTF-32LE";

    unread = n - 4;

    } else if ((bom[0] == (byte) 0xEF) && (bom[1] == (byte) 0xBB) &&

    (bom[2] == (byte) 0xBF)) {

    encoding = "UTF-8";

    unread = n - 3;

    } else if ((bom[0] == (byte) 0xFE) && (bom[1] == (byte) 0xFF)) {

    encoding = "UTF-16BE";

    unread = n - 2;

    } else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)) {

    encoding = "UTF-16LE";

    unread = n - 2;

    } else {

    // Unicode BOM mark not found, unread all bytes

    encoding = defaultEnc;

    unread = n;

    }

    //System.out.println("read=" + n + ", unread=" + unread);

    if (unread > 0) internalIn.unread(bom, (n - unread), unread);

    // Use given encoding

    if (encoding == null) {
    internalIn2 = new InputStreamReader(internalIn);

    } else {

    internalIn2 = new InputStreamReader(internalIn, encoding);

    }

    }


    public void close() throws IOException {

    init();

    internalIn2.close();

    }


    public int read(char[] cbuf, int off, int len) throws IOException {

    init();

    return internalIn2.read(cbuf, off, len);

    }


    private static void readContentAndSaveWithEncoding(String filePath, String readEncoding, String saveEncoding) throws Exception {

    saveContent(filePath, readContent(filePath, readEncoding), saveEncoding);

    }


    private static void saveContent(String filePath, String content, String encoding) throws Exception {

    FileOutputStream fos = new FileOutputStream(filePath);

    OutputStreamWriter w = new OutputStreamWriter(fos, encoding);

    w.write(content);

    w.flush();

    }


    private static String readContent(String filePath, String encoding) throws Exception {

    FileInputStream file = new FileInputStream(new File(filePath));

    BufferedReader br = new BufferedReader(new UTF8BOMConverter(file, encoding));

    String line = null;

    String fileContent = "";

    while ((line = br.readLine()) != null) {

    fileContent = fileContent + line;

    fileContent += " ";

    }

    return fileContent;

    }


    private static List<String> getPerlineFileName(String filePath) throws Exception {

    FileInputStream file = new FileInputStream(new File(filePath));

    BufferedReader br = new BufferedReader(new InputStreamReader(file, "UTF-8"));

    String line = null;

    List<String> list = new ArrayList<String>();

    while ((line = br.readLine()) != null) {

    list.add(line);

    }

    return list;

    }


    private static List<String> getAllFilePaths(File filePath, List<String> filePaths) {

    File[] files = filePath.listFiles();

    if (files == null) {

    return filePaths;

    }

    for (File f : files) {

    if (f.isDirectory()) {

    filePaths.add(f.getPath());

    getAllFilePaths(f, filePaths);

    } else {

    filePaths.add(f.getPath());

    }

    }

    return filePaths;

    }


    public static void main(String[] args) throws Exception {

    String suffix = ".java";


    List<String> paths = new ArrayList<String>();

    paths = getAllFilePaths(new File("E:\mgtt\DING"), paths);


    List<String> pathList = new ArrayList<String>();

    for (String path : paths) {

    if (path.endsWith(suffix)) {

    pathList.add(path);
    }

    }


    for (String path : pathList) {

    readContentAndSaveWithEncoding(path, "UTF-8", "UTF-8");

    System.out.println(path + "转换成功");
    }

    }

    }

  • 相关阅读:
    AVL自平衡二叉树
    笔试+面试信息整理----面向笔试学习、面向面经编程
    传入值参数&传入引用参数的区别
    NLPIR智能挖掘实现行业大数据应用价值
    NLPIR大数据挖掘融合库、智、理三大先进理论技术
    NLPIR智能语义挖掘文本大数据深层意义
    NLPIR智能语义技术从采集到分析一步到位
    灵玖软件:NLPIR智能挖掘对文本数据精细化分析
    九眼合同智能审核系统运用NLPIR大数据技术进行核查
    NLPIR九眼智能审核平台助合同文本深度核查
  • 原文地址:https://www.cnblogs.com/javajetty/p/9985449.html
Copyright © 2020-2023  润新知