• 调用windows系统下的cmd命令窗口处理文件


    从后缀名为grib2的文件中查询相关的信息,并将查出来的信息保存起来。

    主要是学习java中调用windows下的cmd平台,并进行执行相关的命令。

    package com.wis.wgrib2;
    
    import java.io.IOException;
    
    /**
     * @description 主函数
     * @author wis
     *
     */
    public class WgriB2Main {
    
        public static void main(String[] args) throws IOException, InterruptedException {
            new WgriB2CMD().executeCMDfile(new WgriB2FIle().fileList());
            System.out.println("------------------------执行完成---------------------");
        }
    
    }
    package com.wis.wgrib2;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.text.SimpleDateFormat;
    import java.util.List;
    
    /**
     * @description 在控制台进行执行
     * @author wis
     *
     */
    public class WgriB2CMD {
    
        /**
         * @description 在windows控制台执行命令
         * @param list
         *            文件路径的集合
         */
        public void executeCMDfile(List<String> list) {
            // D:	estwgrib2_windowswgrib2.exe
            // D:	estwgrib2_windows110010300.gr2 -lon 89.9 38.4 -s|find "TMP"
            File fileS = new File(WgriB2Bean.getOutPath());
            WgriB2FIle wf = new WgriB2FIle();
            InputStream is = null;
            InputStreamReader isr = null;
            BufferedReader br = null;
            BufferedWriter wr = null;
    
            try {
                for (String fileNamePath : list) {
                    System.out.println(fileNamePath);
                    System.out.println(WgriB2Bean.getExePath());
                    Process p = new ProcessBuilder(WgriB2Bean.getExePath(), fileNamePath, WgriB2Bean.getVar(),
                            WgriB2Bean.getNx(), WgriB2Bean.getNy(), "-s").start();
                    // 等待进程执行完毕,否则会造成死锁。没加这一条的时候,执行了600条左右数据就写不进去了
                    p.waitFor();
                    is = p.getInputStream();
                    isr = new InputStreamReader(is, "utf-8");
                    br = new BufferedReader(isr);
                    wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileS, true)));
                    String line;
                    while ((line = br.readLine()) != null) {
                        String lineSuc = "";
                        if (line.indexOf(WgriB2Bean.getBianZhi()) != -1) {
                            // 89.905338,38.399768,-4.24,2011010103
                            // 1:0 : lon=89.905338,lat=38.399768,val=-3.42 : d=2011010104 : TMP:2 m above
                            // ground:anl:
                            String[] lineMao = line.split(":", 5);
                            lineSuc = wf.ziDuanSplit(lineMao);
                            System.out
                                    .println(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(System.currentTimeMillis())
                                            + " " + "正在处理的文件为: " + new File(fileNamePath).getName());
                            wr.write(lineSuc + ",");
    
                        } else if (line.indexOf(WgriB2Bean.getBianZhi2()) != -1) {
                            // 8:11000501:lon=89.905338,lat=38.399768,val=0:d=2011010104:APCP:surface:anl:
                            String val = wf.jiangShuiVal(line);
                            wr.write(lineSuc + val);
                            wr.newLine();
                        } else if (line.indexOf(WgriB2Bean.getBianZhi2()) == -1
                                && Integer.parseInt(line.substring(0, 1)) == 8) {
                            wr.newLine();
                        }
                    }
                    wr.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (wr != null) {
                        wr.close();
                        wr = null;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if (br != null) {
                        br.close();
                        br = null;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if (isr != null) {
                        isr.close();
                        isr = null;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if (is != null) {
                        is.close();
                        is = null;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    package com.wis.wgrib2;
    
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * @description 对文件或者是字段的操作方法
     * @author wis
     *
     */
    public class WgriB2FIle {
    
        /**
         * @description 获取文件列表
         * @return 文件路径的集合
         */
        public List<String> fileList() {
            System.out.println(WgriB2Bean.getFilePath());
            File file = new File(WgriB2Bean.getFilePath());
            List<String> list = new LinkedList<String>();
            if (file.isDirectory()) {
    
                System.out.println(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(System.currentTimeMillis()) + " "
                        + "文件夹路径为: " + file.getPath());
                File[] files = file.listFiles();
                for (File file2 : files) {
                    if (file2.getName().indexOf("gr2") != -1) {
                        System.out.println(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(System.currentTimeMillis())
                                + " " + "即将处理的文件为: " + file2.getName());
                        if (file2.isFile()) {
                            String fileName = file2.getAbsolutePath();
                            list.add(fileName);
                        }
                    } else {
                        System.out.println(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(System.currentTimeMillis())
                                + " " + "此文件不能进行处理:" + file2.getName());
                    }
                }
            }
            return list;
        }
    
        /**
         * @description 将用冒号“:”切割出来的字段,继续再进行用逗号“,”切割,然后再组合起来(分隔符为逗号,)。原始字段
         *              1:0:lon=89.798607,lat=38.397492,val=266.208:d=2011010103:TMP:2 m
         *              above ground:anl:
         * @param lineMao
         *            完整字段1:0:lon=89.905338,lat=38.399768,val=269.73:d=2011010104:TMP:2
         *            m above ground:anl:中 的[1 0
         *            lon=89.905338,lat=38.399768,val=269.73:d=2011010104 TMP:2 m above
         *            ground:anl:]这个值,很神奇的字符串集合中本身应该使用逗号隔开的,字段解析出来本身也有逗号,尽然没有识别出错。
         * @return 经度、纬度、开尔文和时间戳的值的集合,中间是使用逗号隔开
         */
        public String ziDuanSplit(String[] lineMao) {
            int num = 0;
            String lineSuc = "";
            for (int i = 2; i < (lineMao.length - 1); i++) {
                // lon=89.905338,lat=38.399768,val=-3.42
                String[] lineDengS = lineMao[i].split(",", -1);
                for (int y = 0; y < lineDengS.length; y++) {
                    String lineDengSO = lineDengS[y].substring(lineDengS[y].indexOf("=") + 1);
                    if (y == 2) {
                        // 取出开尔文,并转化成摄氏温度
                        lineDengSO = String.format("%.2f", (Double.parseDouble(lineDengSO) - 273.15));
                    }
                    num++;
                    if (num < 5) {
                        lineSuc = lineSuc.trim() + lineDengSO.trim();
                        if (num < 4) {
                            lineSuc = lineSuc.trim() + ",";
                        }
                    }
                }
            }
            return lineSuc;
        }
    
        /**
         * @description 变量值后面字段的提取(包含变量名的提取)
         * @param lineMao
         *            经度、纬度、开尔文和时间戳的集合
         * @return 经度、纬度、开尔文和时间戳的值的集合
         */
        public String ziDuanHou(String[] lineMao) {
            String bian2 = "";
            // APCP:surface:anl:
            for (int i = 0; i < (lineMao.length - 1); i++) {
                bian2 = bian2 + lineMao[i];
                if (i < (lineMao.length - 2)) {
                    bian2 = bian2 + ",";
                }
            }
            return bian2;
        }
    
        /**
         * @description 降水值的提取
         * @param line
         *            完整的字段
         * @return 降水的值
         */
        public String jiangShuiVal(String line) {
            return line.substring(line.indexOf("val=") + 4, line.indexOf(":d="));
        }
    
    }
    package com.wis.wgrib2;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.Properties;
    
    /**
     * @description bean文件
     * @author wis
     *
     */
    public class WgriB2Bean {
    
        private static Properties prop = null;
        private static String filePath = null;
        private static String var = null;
        private static String varX = null;
        private static String nx = null;
        private static String ny = null;
        private static String npts = null;
        private static String bianZhi = null;
        private static String exePath = null;
        private static String outPath = null;
        private static String bianZhi2 = null;
        /**
         * @description 加载配置文件
         */
        static {
            InputStream in = null;
            try {
                // 包内读取
                in = WgriB2FIle.class.getClassLoader().getResourceAsStream("wgrib2.properties");
                // jar包外读取
                // in = new FileInputStream("wgrib2.properties");
    
                prop = new Properties();
                prop.load(in);
                filePath = prop.getProperty("FILE_PATH");
                var = prop.getProperty("VAR");
                varX = prop.getProperty("VARX");
                nx = prop.getProperty("NX");
                ny = prop.getProperty("NY");
                npts = prop.getProperty("NPTS");
                bianZhi = prop.getProperty("BIANZHI");
                exePath = prop.getProperty("EXT_PATH");
                outPath = prop.getProperty("OUT_PATH");
                bianZhi2 = prop.getProperty("BIANZHI_2");
    
                // System.out.println("=============================" + nx);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (in != null)
                        in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                System.out.println(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(System.currentTimeMillis()) + " "
                        + "属性文件加载完成,开始数据处理");
            }
        }
    
        public static Properties getProp() {
            return prop;
        }
    
        public static void setProp(Properties prop) {
            WgriB2Bean.prop = prop;
        }
    
        public static String getFilePath() {
            return filePath;
        }
    
        public static void setFilePath(String filePath) {
            WgriB2Bean.filePath = filePath;
        }
    
        public static String getVar() {
            return var;
        }
    
        public static void setVar(String var) {
            WgriB2Bean.var = var;
        }
    
        public static String getVarX() {
            return varX;
        }
    
        public static void setVarX(String varX) {
            WgriB2Bean.varX = varX;
        }
    
        public static String getNx() {
            return nx;
        }
    
        public static void setNx(String nx) {
            WgriB2Bean.nx = nx;
        }
    
        public static String getNy() {
            return ny;
        }
    
        public static void setNy(String ny) {
            WgriB2Bean.ny = ny;
        }
    
        public static String getNpts() {
            return npts;
        }
    
        public static void setNpts(String npts) {
            WgriB2Bean.npts = npts;
        }
    
        public static String getBianZhi() {
            return bianZhi;
        }
    
        public static void setBianZhi(String bianZhi) {
            WgriB2Bean.bianZhi = bianZhi;
        }
    
        public static String getExePath() {
            return exePath;
        }
    
        public static void setExePath(String exePath) {
            WgriB2Bean.exePath = exePath;
        }
    
        public static String getOutPath() {
            return outPath;
        }
    
        public static void setOutPath(String outPath) {
            WgriB2Bean.outPath = outPath;
        }
    
        public static String getBianZhi2() {
            return bianZhi2;
        }
    
        public static void setBianZhi2(String bianZhi2) {
            WgriB2Bean.bianZhi2 = bianZhi2;
        }
    
    }
    FILE_PATH=D:/wgrib2_test/test/2011
    EXT_PATH=d:/LAPS1KM20112013/run/jar2011q/exe/wgrib2.exe
    VAR=-lon
    VARX=
    #文件格式支持txt和csv的
    OUT_PATH=D:/test/2013hbu.csv
    NPTS=
    BIANZHI=TMP
    BIANZHI_2=APCP
    #xx县101.002080000,37.0347970000
    NX=101.002080000
    NY=37.0347970000
  • 相关阅读:
    Nginx负载均衡和LVS负载均衡的比较分析
    Nginx和Squid配合搭建的Web服务器前端系统
    (总结)Linux服务器上最简单的Nginx反向代理配置
    Nginx主要模块常用指令说明
    (总结)Nginx 502 Bad Gateway错误触发条件与解决方法
    (总结)Linux下查看Nginx Apache MySQL的并发连接数和连接状态
    (总结)统计Apache或Nginx访问日志里的独立IP访问数量的Shell
    IoC模式(依赖、依赖倒置、依赖注入、控制反转)
    使用OAuth打造webapi认证服务供自己的客户端使用
    RESTful API 设计指南
  • 原文地址:https://www.cnblogs.com/zzf0305/p/9340483.html
Copyright © 2020-2023  润新知