• maven项目打包


    第一种方式使用原来导出的方式

    第二种方式使用maven 打包

     

     

    如果出现报错非法字符:65279 错误

    是因为报错的文件的格式是UTF-8 BOM 需要转为UTF-8

    通过工具类进行批量转换

    package com.td.utils;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PushbackInputStream;
    import java.io.Reader;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * utf-8有bom 批量转为 utf-8无bom 文件格式
     */
    public class UTF8BOMConverter extends Reader {
    
        private static final int BOM_SIZE = 4;
        PushbackInputStream internalIn;//回退流对象
        InputStreamReader internalIn2 = null;
        String defaultEnc;//格式
        /**
         * @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;
        }
    
        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;
        }
    
        /**
         * 获取某个目录下所有的文件路径
         * 使用递归
         * @param filePath
         * @param filePaths
         * @return
         */
        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("D:\14b\mavenTderp\src\main\java\com\td\model"), 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 + "转换成功");
            }
        }
    
        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);
        }
    }
    View Code
  • 相关阅读:
    面试题:区分List中remove(int index)和remove(Object obj)
    Collection的子接口之一:List 接口
    面试题:ArrayList、LinkedList、Vector三者的异同?
    jdk 5.0 新增的foreach循环(用于遍历集合、数组)
    Iterator迭代器接口(遍历Collection的两种方式之一)
    哈希值
    Collection接口方法
    集合框架的概述
    注解(Annotation)
    System类、Math类、BigInteger与BigDecimal的使用
  • 原文地址:https://www.cnblogs.com/lldsgj/p/10773515.html
Copyright © 2020-2023  润新知