文本替换demo

package com.na.ip;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws UnknownHostException, IOException {

        String local = "localhost";
        String server = "baseserver";
        String ip = getLocalIp();
        String baseserver = "";
        String folder = getJarDir();
        System.out.println("当前路径为:" + folder);
        System.out.println("本机ip为:" + ip);
        System.out.println("是否正确(Y/N)?");
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        if ("Y".equalsIgnoreCase(str)) {
        } else {
            System.out.println("输入本机IP:");
            sc = new Scanner(System.in);
            str = sc.nextLine();
            ip = str;
        }
        System.out.println("输入基础服务机器IP(多个需要,隔开):");
        sc = new Scanner(System.in);
        str = sc.nextLine();
        baseserver = str;
        if (args != null && args.length > 0 && args[0].equalsIgnoreCase("vip")) {
            if (args.length > 2 && args[1].equals("vvip")) {
                System.out.println("输入源文件夹路径:");
                sc = new Scanner(System.in);
                str = sc.nextLine();
                folder = str;
            }

            System.out.println("输入本机IP需要替换的字符串:");
            sc = new Scanner(System.in);
            str = sc.nextLine();
            local = str;
            System.out.println("输入基础服务机器IP需要替换的字符串:");
            sc = new Scanner(System.in);
            str = sc.nextLine();
            server = str;
        }
        System.out.println("本机ip为:" + ip + ",将替换字符串:" + local + ";基础服务ip为:" + baseserver + ",将替换字符串:" + server);
        System.out.println("输入目标文件夹路径:");
        sc = new Scanner(System.in);
        str = sc.nextLine();
        String dest = str;

        File dir = new File(folder);
        for (File file : dir.listFiles()) {
            if (!file.isDirectory()) {
                continue;
            }
            String folderName = file.getName();
            File serverFolder = new File(dest + File.separator + folderName);
            if (!serverFolder.exists()) {
                serverFolder.mkdirs();
            }
            for (File configFile : file.listFiles()) {
                if (!configFile.isDirectory()) {
                    continue;
                }
                String configFolderName = configFile.getName();
                File configFolder = new File(serverFolder.getAbsoluteFile() + File.separator + configFolderName);
                if (!configFolder.exists()) {
                    configFolder.mkdirs();
                }
                for (File config : configFile.listFiles()) {
                    if (config.isDirectory()) {
                        continue;
                    }
                    String name = config.getName();
                    File configTxt = new File(configFolder.getAbsoluteFile() + File.separator + name);
                    System.out.println("开始替换" + config.getAbsolutePath() + "文件内容:");
                    if(name.contains("ignite") && baseserver.split(",|,").length > 1 
                            && server.split(",|,").length == baseserver.split(",|,").length) {
                        replacTextContent(config.getAbsolutePath(),baseserver.split(",|,"),
                                server.split(",|,"), configTxt.getAbsolutePath());
                        replacTextContent(configTxt.getAbsolutePath(),new String[] { local },
                                new String[] { ip }, configTxt.getAbsolutePath());
                        
                    }else {
                        replacTextContent(config.getAbsolutePath(), new String[] { local, server },
                                new String[] { ip, baseserver }, configTxt.getAbsolutePath());
                    }
                }
            }

        }

    }

    // 获取jar目录
    public static String getJarDir() {
        File file = getFile();
        if (file == null)
            return null;
        return getFile().getParent();
    }

    public static File getFile() {
        String path = Main.class.getProtectionDomain().getCodeSource().getLocation().getFile();
        try {
            path = java.net.URLDecoder.decode(path, "UTF-8");// 转换处理中文及空格
        } catch (java.io.UnsupportedEncodingException e) {
            return null;
        }
        return new File(path);
    }

    /**
     * 替换文本文件中的字符串
     * 
     * @param path
     * @throws IOException
     */
    public static void replacTextContent(String path, String[] srcStr, String[] replaceStr, String dest){
        try {
            //
            File file = new File(path);
            //FileReader in = new FileReader(file);
            BufferedReader bufIn = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
            // 内存流, 作为临时流
            //CharArrayWriter tempStream = new CharArrayWriter();
            OutputStreamWriter tempStream = new OutputStreamWriter(new FileOutputStream(new File(dest)),"UTF-8");
            // 替换
            String line = null;
            while ((line = bufIn.readLine()) != null) {
                // 替换每行中, 符合条件的字符串
                for (int i = 0; i < srcStr.length; i++) {
                    line = line.replaceAll(srcStr[i], replaceStr[i]);
                }
                // 将该行写入内存
                tempStream.write(line);
                // 添加换行符
                tempStream.append(System.getProperty("line.separator"));
            }
            // 关闭 输入流
            bufIn.close();
            // 将内存中的流 写入 文件
            //FileWriter out = new FileWriter(new File(dest));
            //tempStream.writeTo(out);
            //out.close();
            tempStream.close();
            System.out.println("替换结束,生成文件路径:" + dest);
        } catch (Throwable e) {
            System.err.println("替换"+path+"文件失败!");
        }
        

    }

    public static String getLocalIp() throws UnknownHostException {
        InetAddress address = InetAddress.getLocalHost();
//        System.out.println(address);// 获取计算机名称和ip地址
        String hostAddress = address.getHostAddress();
//        System.out.println(hostAddress);// 获取ip地址
//        String hostName = address.getHostName();
//        System.out.println(hostName);// 获取计算机名称
        return hostAddress;
    }
}

 编译运行:

javac -encoding utf-9 Main.java

java Main

 

posted @ 2020-09-15 16:16  凉城  阅读(149)  评论(0编辑  收藏  举报