前幾天的文章已經可以順利的使用Java呼叫CMD
現在介紹另一種方式是使用ProcessBuilder呼叫,搭配前一篇Java處理字串中含有雙引號的字串
可以完整的呈現不使用批次檔,不用下 cd command to executing directory(可直接設定cmd執行目錄)
程式碼如下
import java.io.*;
import java.util.*;
public class ProcessBuilderTest {
public static void main(String args[])
throws InterruptedException,IOException
{
final List<String> commands = new ArrayList<String>();
commands.add("cmd.exe");
commands.add("/C");
commands.add("curl -k -u admin:!QAZxsw2 -s https://localhost:8089/services/search/jobs/ -d\"search=| savedsearch selectFromDual\"");
//在Java中若是字串中含有字串例如 " "name" " 應表示為 "\"name\" "
//commands.add("curl -k -u admin:!QAZxsw2 -s https://localhost:8089/services/search/jobs/"+sid+"/results/");
commands.add("start");
//ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/C", "start");
ProcessBuilder builder = new ProcessBuilder(commands);
File dir = new File("C:\\Users\\Peter\\Desktop\\openssl-0.9.8h-1-bin\\bin");
builder.directory(dir);
final Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
System.out.println("Program terminated!");
}
}
2014年7月7日 星期一
Java如何在字串中含有另一個雙引號的字串
最近遇到這樣的情形,使用cURL工具 search Splunk時 search的字串中含有另一個字串
想要以Java的方式呈現,都會出現錯誤!
今天終於找到方法了
如下程式碼
public class Test{
public static void main(String[] args){
String str1 = "\"Peter\"";//字串兩邊含有雙引號
String str2 = "Peter \"is\" boy";//字串中間含有雙引號
String str3 = "\\Peter";//使用\字符可以使字串包含其他字串
System.out.println("字串一:" + str1);
System.out.println("字串二:" + str2);
System.out.println("字串三:" + str3);
}
}
執行結果
請注意看 字串一的寫法 在中間的字串雙引號前 先加一個 \ 雙引號結尾前 再加一個 \
參考Java处理本身包含双引号的String
想要以Java的方式呈現,都會出現錯誤!
今天終於找到方法了
如下程式碼
public class Test{
public static void main(String[] args){
String str1 = "\"Peter\"";//字串兩邊含有雙引號
String str2 = "Peter \"is\" boy";//字串中間含有雙引號
String str3 = "\\Peter";//使用\字符可以使字串包含其他字串
System.out.println("字串一:" + str1);
System.out.println("字串二:" + str2);
System.out.println("字串三:" + str3);
}
}
執行結果
請注意看 字串一的寫法 在中間的字串雙引號前 先加一個 \ 雙引號結尾前 再加一個 \
參考Java处理本身包含双引号的String
2014年7月3日 星期四
使用 Java 呼叫 cmd.exe 並下指令(下)-Splunk Java Solution
跟著上一篇文章,除了讓CMD幫我們做事情外,我還需要將資料直接可以在Java中取用
則更改前一篇文章,改使用以下程式碼,如圖就可以在Eclipse Console看到如CMD裡顯示的狀態啦!
import java.io.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
public class AppLauncher {
public static void main(String[] args) throws Exception
{
/*
*若需外部傳入可用下列語法,執行時ex:java AppLauncher "cmd.exe /c c:123.bat"
*/
//String cmd = args.length == 0? "java -version" : args[0];
String[] cmd = new String[3];
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
//填入執行程式路徑
cmd[2] = "D:/SplunkSearchId.bat" ;
//-s 為curl 不顯示download進度訊息
//String cmd = "java -version";
Process process = Runtime.getRuntime().exec(cmd);
new Thread(new SubTask(process.getInputStream())).start();
new Thread(new SubTask(process.getErrorStream())).start();
process.waitFor();
//多印一空白行
System.out.println();
System.out.println("====================Application terminated=======================");
}
}
class SubTask implements Runnable {
public SubTask(InputStream istream)
{
if (istream == null){
iReader = new BufferedReader(new InputStreamReader(System.in));
}
else
iReader = new BufferedReader(new InputStreamReader(istream));
}
public void run()
{
try {
String input = iReader.readLine();
while (input != null)
{
//若需執行結果可將input傳出
System.out.println(input);
/*String html = input;
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
//String testValue = "0";
for (Element e : doc.select("sid")) {
//System.out.println(e);
System.out.println("hi: " + e.text());
//testValue = e.text();
}*/
input = iReader.readLine();
}
}
catch (IOException ioe) {
}
}
private BufferedReader iReader;
}
則更改前一篇文章,改使用以下程式碼,如圖就可以在Eclipse Console看到如CMD裡顯示的狀態啦!
import java.io.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
public class AppLauncher {
public static void main(String[] args) throws Exception
{
/*
*若需外部傳入可用下列語法,執行時ex:java AppLauncher "cmd.exe /c c:123.bat"
*/
//String cmd = args.length == 0? "java -version" : args[0];
String[] cmd = new String[3];
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
//填入執行程式路徑
cmd[2] = "D:/SplunkSearchId.bat" ;
//-s 為curl 不顯示download進度訊息
//String cmd = "java -version";
Process process = Runtime.getRuntime().exec(cmd);
new Thread(new SubTask(process.getInputStream())).start();
new Thread(new SubTask(process.getErrorStream())).start();
process.waitFor();
//多印一空白行
System.out.println();
System.out.println("====================Application terminated=======================");
}
}
class SubTask implements Runnable {
public SubTask(InputStream istream)
{
if (istream == null){
iReader = new BufferedReader(new InputStreamReader(System.in));
}
else
iReader = new BufferedReader(new InputStreamReader(istream));
}
public void run()
{
try {
String input = iReader.readLine();
while (input != null)
{
//若需執行結果可將input傳出
System.out.println(input);
/*String html = input;
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
//String testValue = "0";
for (Element e : doc.select("sid")) {
//System.out.println(e);
System.out.println("hi: " + e.text());
//testValue = e.text();
}*/
input = iReader.readLine();
}
}
catch (IOException ioe) {
}
}
private BufferedReader iReader;
}
另外請注意一下 程式碼中有註解的地方 是 XML Parser的方式,這邊使用JSOUP jar
因為Splunk Restful API回傳的default格式是XML,其實這樣已經是一個完整的Splunk with JAVA Solution (Java+CMD+cURL+JSOUP)
使用 Java 呼叫 cmd.exe 並下指令(上)
如題,最近由於研究 Splunk Restful API
想透過 API 得到我所要的資料,但Splunk Default支援使用cURL工具來做查詢
由於我cURL安裝好了後,還是得使用cmd下指令,而將來也必須一併整合至
Java,所以以下範例程式為 撰寫一支Java程式呼叫cmd,並執行一個.bat檔案(splunk curl 指令)
目的是取回Splunk Job ID, 圖示為程式的執行結果~*
import java.io.*;
public class CMD {
public static void main(String args[]) {
String path = "D:\\SplunkSearchId.bat";
Runtime run = Runtime.getRuntime();
try {
/*cmd /c dir 是執行完dir命令後關閉命令窗口。
cmd /k dir 是執行完dir命令後不關閉命令窗口。
cmd /c start dir /b會打開一個新窗口後執行dir指令,原窗口會關閉。
cmd /k start dir 會打開一個新窗口後執行dir指令,原窗口不會關閉。*/
Process process = run.exec("cmd /k start " + path);
InputStream in = process.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
}
}
想透過 API 得到我所要的資料,但Splunk Default支援使用cURL工具來做查詢
由於我cURL安裝好了後,還是得使用cmd下指令,而將來也必須一併整合至
Java,所以以下範例程式為 撰寫一支Java程式呼叫cmd,並執行一個.bat檔案(splunk curl 指令)
目的是取回Splunk Job ID, 圖示為程式的執行結果~*
import java.io.*;
public class CMD {
public static void main(String args[]) {
String path = "D:\\SplunkSearchId.bat";
Runtime run = Runtime.getRuntime();
try {
/*cmd /c dir 是執行完dir命令後關閉命令窗口。
cmd /k dir 是執行完dir命令後不關閉命令窗口。
cmd /c start dir /b會打開一個新窗口後執行dir指令,原窗口會關閉。
cmd /k start dir 會打開一個新窗口後執行dir指令,原窗口不會關閉。*/
Process process = run.exec("cmd /k start " + path);
InputStream in = process.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用WLS SNMP Monitor CMD
最近某個專案要利用SNMP來監測WLS的狀態
在現在新的版本都建議要使用WLS的SNMP Agent功能(請參考WLS設定Trap http://weblogic-wonders.com/weblogic/2010/12/19/weblogic-snmp-to-monitor-jdbc-connection-pool/)
但是 假設我們手邊沒有其它工具可以觀察是否設定成功
WLS本身有提供Command Line的方式來供使用者測試
首先打開命令提示字元後,必須將WEBLOGIC_PATH加入
意思是使用cmd會根據PATH尋找對應的class
由於我安裝的WLS並沒有事先把WEBLOGIC_PATH設定好
所以請參考下圖至%WLS_HOME/server/bin下使用setWLSEnv.cmd or setWLSEnv.sh(Linux)
再echo看看是否已設定成功,接著就可以使用 WLS提供的monitor cmd了
注意第三張圖 -p(port) 是 你在WLS Admin Console設定 Trap的 port喔!
在現在新的版本都建議要使用WLS的SNMP Agent功能(請參考WLS設定Trap http://weblogic-wonders.com/weblogic/2010/12/19/weblogic-snmp-to-monitor-jdbc-connection-pool/)
但是 假設我們手邊沒有其它工具可以觀察是否設定成功
WLS本身有提供Command Line的方式來供使用者測試
首先打開命令提示字元後,必須將WEBLOGIC_PATH加入
意思是使用cmd會根據PATH尋找對應的class
由於我安裝的WLS並沒有事先把WEBLOGIC_PATH設定好
所以請參考下圖至%WLS_HOME/server/bin下使用setWLSEnv.cmd or setWLSEnv.sh(Linux)
再echo看看是否已設定成功,接著就可以使用 WLS提供的monitor cmd了
注意第三張圖 -p(port) 是 你在WLS Admin Console設定 Trap的 port喔!
訂閱:
文章 (Atom)