从后缀名为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:\test\wgrib2_windows\wgrib2.exe
// D:\test\wgrib2_windows\110010300.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

调用windows系统下的cmd命令窗口处理文件的更多相关文章

  1. windows系统下在dos命令行kill掉被占用的pid (转)

    原文出自:http://www.2cto.com/os/201304/203771.html   windows系统下在dos命令行kill掉被占用的pid   1.开始-->运行-->c ...

  2. c语言基础学习02_windows系统下的cmd命令

    =============================================================================注意:cmd的命令很多,需要用的时候可以查询即 ...

  3. Windows 系统中的 CMD 黑窗口简单介绍

    简介 DOS是磁盘操作系统的缩写,是个人计算机上的一类操作系统DOS命令,是DOS操作系统的命令,是一种面向磁盘的操作命令,主要包括目录操作类命令.磁盘操作类命令.文件操作类命令和其它命令.DOS系统 ...

  4. WIndows 系统下的常用命令 和 检测方法

    ### 一.检测硬盘速度(Windows 自带工具) #### 使用windows 系统自带的工具测试硬盘读写速度 > 在使用下面命令前,需要获得管理员权限,才会在Dos窗口上显示(否则,一闪而 ...

  5. 三种方法在当前目录下打开cmd命令窗口

    概述 运行npm的时候,每次都要cd到目录,很麻烦,所以总结了三种在当前目录下直接打开cmd窗口的方法,供以后开发时参考,相信对其他人也有用. 方法一 在当前目录按住shift再右键. 会看到右键菜单 ...

  6. Windows系统下在Git Bash中把文件内容复制到剪贴板的命令

    众所周知,在OS系统中,复制文件内容到剪贴板(比如复制公钥到剪贴板)的命令是: pbcopy < ~/.ssh/id_rsa.pub 在Win7或者Win10下这条命令就没用了.可以这样: cl ...

  7. Windows 系统下安装 dig 命令

    dig是一个Linux下用来DNS查询信息的小工具,dig全称是Domain Information Groper,与nslookup类似,但比nslookup功能更强大.Windows只有nsloo ...

  8. Windows系统下安装dig命令

    dig 是一个 Linux 下用来 DNS 查询信息的工具,全称是Domain Information Groper,与 nslookup 类似,但比 nslookup 功能更强大.Windows 下 ...

  9. windows系统下使用cd命令

    如果要切换到D:\Program Files目录下,大多数人会想当然的在命令行窗口输入 cd D:\Program Files回车. 如下所示: 发现并没有切换到D:\Program Files. 正 ...

随机推荐

  1. 解决calamari无法获取节点信息的bug

    前言 一直在做calamari的相关的一些打包和安装的工作,都是业余弄的东西,所以并没有仔细的进行功能点的验证测试,正好ceph社区群里面有人问了个问题 calamari上是不是能看到ceph的ver ...

  2. JavaScrip_12.23

    笔记系列,零散的知识点,准备以后复习整理使用 JavaScrip - 事件DOM绑定[将函数添加到一个元素对象的属性中] 1.事件 鼠标.键盘.操作等:所有的GUI都有 onclick(单击事件) 例 ...

  3. 4.Spring Boot web开发

    1.创建一个web模块 (1).创建SpringBoot应用,选中我们需要的模块: (2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 (3).自己编 ...

  4. [原题复现]BJDCTF2020 WEB部分全部解

    简介  原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学 ...

  5. python学习-pickle模块(序列化)

    简介 1 python-pickle模块 该pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. "Pickling"是将Python对象层次结构转换为字节 ...

  6. mysql官网下载yum

    1.进入mysql官网 2.下载页面最下方的社区下载 3.找到yum库 下载: 7.安装.rpm[root@test tools]# rpm -ivh mysql80-community-releas ...

  7. FL Studio音频混音教程

    FL Studio是一款音乐制作.编曲.混音软件,其内置众多电子合成音色,还支持第三方VST等格式插件.软件操作界面简洁易上手,即使你是零音乐基础小白,通过它也能轻松实现自己音乐梦想,很多人给他起了个 ...

  8. CorelDRAW快速去除图片背景颜色

    当我们需要从网上借助一些素材图片在CorelDRAW中运用时,往往需要去掉图片的背景颜色.本文小编分享CDR中如何快速去除图片背景颜色的方法,通过此方法可以做简单的照片抠图.合成. 1. 打开Core ...

  9. SFTP 连接服务器下载文件方法采坑说明

    本篇博客主要记录请求SFTP服务器的一些方法采坑情况. 采坑的方法说明: 1. cd():这个方法用于进入某个目录下. 默认情况,当连接SFTP服务器成功后直接进入用户目录,比如我连接自己本机SFTP ...

  10. Shell编程规范:Don't use ls | grep

    目录 一.背景 二.ShellCheck的规范 三.修改写法 1.ls | grep file 2.ls | grep regexp 3.ls | grep -v multi 四.最后 五.参考 一. ...