调用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:\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命令窗口处理文件的更多相关文章
- windows系统下在dos命令行kill掉被占用的pid (转)
原文出自:http://www.2cto.com/os/201304/203771.html windows系统下在dos命令行kill掉被占用的pid 1.开始-->运行-->c ...
- c语言基础学习02_windows系统下的cmd命令
=============================================================================注意:cmd的命令很多,需要用的时候可以查询即 ...
- Windows 系统中的 CMD 黑窗口简单介绍
简介 DOS是磁盘操作系统的缩写,是个人计算机上的一类操作系统DOS命令,是DOS操作系统的命令,是一种面向磁盘的操作命令,主要包括目录操作类命令.磁盘操作类命令.文件操作类命令和其它命令.DOS系统 ...
- WIndows 系统下的常用命令 和 检测方法
### 一.检测硬盘速度(Windows 自带工具) #### 使用windows 系统自带的工具测试硬盘读写速度 > 在使用下面命令前,需要获得管理员权限,才会在Dos窗口上显示(否则,一闪而 ...
- 三种方法在当前目录下打开cmd命令窗口
概述 运行npm的时候,每次都要cd到目录,很麻烦,所以总结了三种在当前目录下直接打开cmd窗口的方法,供以后开发时参考,相信对其他人也有用. 方法一 在当前目录按住shift再右键. 会看到右键菜单 ...
- Windows系统下在Git Bash中把文件内容复制到剪贴板的命令
众所周知,在OS系统中,复制文件内容到剪贴板(比如复制公钥到剪贴板)的命令是: pbcopy < ~/.ssh/id_rsa.pub 在Win7或者Win10下这条命令就没用了.可以这样: cl ...
- Windows 系统下安装 dig 命令
dig是一个Linux下用来DNS查询信息的小工具,dig全称是Domain Information Groper,与nslookup类似,但比nslookup功能更强大.Windows只有nsloo ...
- Windows系统下安装dig命令
dig 是一个 Linux 下用来 DNS 查询信息的工具,全称是Domain Information Groper,与 nslookup 类似,但比 nslookup 功能更强大.Windows 下 ...
- windows系统下使用cd命令
如果要切换到D:\Program Files目录下,大多数人会想当然的在命令行窗口输入 cd D:\Program Files回车. 如下所示: 发现并没有切换到D:\Program Files. 正 ...
随机推荐
- Python_爬虫_BeautifulSoup网页解析库
BeautifulSoup网页解析库 from bs4 import BeautifulSoup 0.BeautifulSoup网页解析库包含 的 几个解析器 Python标准库[主要,系统自带;] ...
- centos搭建dns服务
原文:(https://www.myjinji.top/articles/2020/04/02/1585800289945.html)[https://www.myjinji.top/articles ...
- Mac OS终端利器 iTem2 配置大全
转载链接:https://www.cnblogs.com/diyxiaoshitou/p/9017413.html 之前一直使用 Mac OS 自带的终端,用起来虽然有些不太方便,但总体来说还是可以接 ...
- "三剑客"之awk心中无剑
一.awk介绍 awk 是一种程序语言. 它具有一般程序语言常见的功能. 因awk语言具有某些特点, 如 : 使用直译器(Interpreter)不需先行编译; 变量无类型之分(Typeless), ...
- Guitar Pro小课堂——如何进行消音
在我们弹吉他时,消音技术是必须掌握的一项吉他技能.在我们遇到休止符时.乐曲结束时.乐段,乐句中止时.吉他旋律的分句,呼吸处:变换和弦时的低音(尤其是空弦低音).断奏.弹奏强音时其他空弦被激起的共鸣音( ...
- Fruity Parametric EQ 2使用说明(一)——FL Studio插件教程
FL Studio插件教程-Fruity Parametric EQ 2使用说明(一) Fruity Parametric EQ 2均衡器,是一款我们在FL Studio制作音乐时经常会用到的插件,它 ...
- FL studio系列教程(十二):FL Studio中如何导出音频
在FL Studio中制作好音乐后,最后展现给我们的是一般的音频文件,我们可以通过FL Studio的文件菜单导出最终的文件格式.下面我们就来详细的看一下FL Studio中是如何导出我们想要的音频格 ...
- 下载器Folx专业版有没有iTunes整合功能
对于使用Mac系统的用户来说,相信对iTunes都不陌生.Folx专业版提供的iTunes整合功能,能将下载的音频.电影等文件自动同步到iTunes. 该功能将会有助于用户的音频.视频整合,对于喜欢听 ...
- 「CSP-S 2020」儒略日
description luogu loj(暂无数据) solution 这道题作为T1,对选手们仔细看清题目的好习惯,以及不为2h调试.5k代码而心态爆炸的重要能力进行了较好的锻炼, 特别准备的只有 ...
- 聊聊 ClassLoader 是如何查找资源的
ClassLoader作用 classloader这个写业务代码的童鞋们,应该很少用到,但是写框架的应该很熟悉.这个类负责Java底层的类的加载和查找,简单滴说Java 的所有类都是由它负责将clas ...