以下方法支持Linux和windows兩個系統的命令行調用。還用到了apache的lang工具包commons-lang3-3.1.jar來判斷操作系統類型、也用到了和log4j-1.2.16.jar來列印日誌。至於rm -rf 是否能成功刪除文件,可以手動去調用命令行試試。
privateStringcallCmd(Stringcmd)throwsInterruptedException,UnHandledOSException,ExecuteException{
if(SystemUtils.IS_OS_LINUX){
try{
//使用Runtime來執行command,生成Process對象
Processprocess=Runtime.getRuntime().exec(
newString[]{"/bin/sh","-c",cmd});
intexitCode=process.waitFor();
//取得命令結果的輸出流
InputStreamis=process.getInputStream();
//用一個讀輸出流類去讀
InputStreamReaderisr=newInputStreamReader(is);
//用緩沖器讀行
BufferedReaderbr=newBufferedReader(isr);
Stringline=null;
StringBuildersb=newStringBuilder();
while((line=br.readLine())!=null){
System.out.println(line);
sb.append(line);
}
is.close();
isr.close();
br.close();
returnsb.toString();
}catch(java.lang.NullPointerExceptione){
System.err.println("NullPointerException"+e.getMessage());
logger.error(cmd);
}catch(java.io.IOExceptione){
System.err.println("IOException"+e.getMessage());
}
thrownewExecuteException(cmd+"執行出錯!");
}
if(SystemUtils.IS_OS_WINDOWS){
Processprocess;
try{
//process=newProcessBuilder(cmd).start();
String[]param_array=cmd.split("[\s]+");
ProcessBuilderpb=newProcessBuilder(param_array);
process=pb.start();
/*process=Runtime.getRuntime().exec(cmd);*/
intexitCode=process.waitFor();
InputStreamis=process.getInputStream();
InputStreamReaderisr=newInputStreamReader(is);
BufferedReaderbr=newBufferedReader(isr);
Stringline;
StringBuildersb=newStringBuilder();
while((line=br.readLine())!=null){
System.out.println(line);
sb.append(line);
}
is.close();
isr.close();
br.close();
returnsb.toString();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
thrownewExecuteException(cmd+"執行出錯!");
}
thrownewUnHandledOSException("不支持本操作系統");
}
B. java程序里調用linux命令
Java語言以其跨平台性和簡易性而著稱,在Java裡面的lang包里(java.lang.Runtime)提供了一個允許Java程序與該程序所運
行的環境交互的介面,這就是Runtime類,在Runtime類里提供了獲取當前運行環境的介面。
其中的exec函數返回一個執行shell命令的子進程。exec函數的具體實現形式有以下幾種:
public Process exec(String command) throws IOException
public Process exec(String command,String[] envp) throws
IOException
public Process exec(String command,String[] envp,File dir) throws
IOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String[] cmdarray, String[] envp) throws
IOException
public Process exec(String[] cmdarray, String[] envp,File dir)
throws IOException
我們在這里主要用到的是第一個和第四個函數,具體方法很簡單,就是在exec函數中傳遞一個代表命令的字元串。exec函數返回的是一個Process類
型的類的實例。Process類主要用來控制進程,獲取進程信息等作用。(具體信息及其用法請參看Java doc)。
1)執行簡單的命令的方法:
代碼如下:
C. 如何用Java寫代碼連上Linux主機去在主機上執行命令
其實不難,給你思路如下:
第一,你需要在遠程Linux主機上面裝好一個接收端程序,這個程序可以是java寫的,也可以是C語言寫的,都無所謂,因為網路介面是一樣的,都是socket。
如果你要用java寫,那需要在Linux上面把jdk裝上,推薦你用C寫,更容易操作linux執行cmd命令.
假設從主機A,檢查主機B上的進程,
需要在主機B上建立檢查用戶,例如叫x,
並設置通過public key認證登錄SSH,不會可以google搜一下,
然後,在A機器上執行:
ssh x@B ~/command.sh > result.txt
command.sh就是B機器上放置在x目錄下的腳本。
輸出結果應該是寫到了result.txt
或者另一種寫法
result=`ssh x@B ~/command.sh`
結果直接保存到result變數中了。
暫時沒有linux環境,所以沒有實際測試,你自己試試吧
D. 如何在java程序中調用linux命令或者shell腳本
java程序是提供了這個一方法,Processpro=Runtime.getRuntime().exec(cmds);
但是一般來說,盡量去用一些其他腳本(lua,shell,python)去執行一系列linux命令比較靈活, 而且耗費資源少。但是Runtime.getRuntime().exec()這種調用方式在java虛擬機中是十分消耗資源的,即使命令可以很快的執行完畢,頻繁的調用時創建進程消耗十分可觀。
java虛擬機執行這個命令的過程是,首先克隆一條和當前虛擬機擁有一樣環境變數的進程,再用這個新的進程執行外部命令,最後退出這個進程。頻繁的創建對CPU和內存的消耗很大。
下面是一個調用linux命令的例子:
publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
String[]cmds={"/bin/sh","-c","ps-ef|grepjava"};
Processpro=Runtime.getRuntime().exec(cmds);
pro.waitFor();//阻塞,直到上述命令執行完
InputStreamin=pro.getInputStream();
BufferedReaderread=newBufferedReader(newInputStreamReader(in));
Stringline=null;
while((line=read.readLine())!=null){
System.out.println(line);
}
}
}
E. java如何連接linux系統後台執行相應的命令
java提供的Runtime 這個類來執行系統命令的,用法如下:
1.得到Runtime對象。
public void execCommand(String command) throws IOException {
// start the ls command running
//String[] args = new String[]{"sh", "-c", command};
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command); //這句話就是shell與高級語言間的調用
//如果有參數的話可以用另外一個被重載的exec方法
//實際上這樣執行時啟動了一個子進程,它沒有父進程的控制台
//也就看不到輸出,所以需要用輸出流來得到shell執行後的輸出
2.得到輸入流。
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
// read the ls output
String line = "";
StringBuilder sb = new StringBuilder(line);
while ((line = bufferedreader.readLine()) != null) {
//System.out.println(line);
sb.append(line);
sb.append('\n');
}
//tv.setText(sb.toString());
//使用exec執行不會等執行成功以後才返回,它會立即返回
//所以在某些情況下是很要命的(比如復制文件的時候)
//使用wairFor()可以等待命令執行完成以後才返回
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
}
}
catch (InterruptedException e) {
System.err.println(e);
}
}
}
F. 在Java中如何操作linux命令行運行.sql文件
連接linux,
可以使用工具如filezilla ,x5等上傳 你的sql文件到linux伺服器上
登錄mysql
復制代碼代碼如下:
>mysql -u root -p
>password:
注意,如果你之前建立了其他的mysql用戶,可以選擇合適的用戶登錄。
按照下面的三個步驟,快速導入這個sql文件
復制代碼代碼如下:
mysql>use yourdatabasename;
mysql>set names utf8;
mysql>source /tmp/database.sql;
然後屏幕上就會不斷的滾,最後提示導入成功。
最後,記得將database.sql刪除。
G. java中操作Linux的ganymed和Jsch各有什麼特點
Java和Linux的理想關系是,一方面有一種可以在所有操作系統上運行的語言,另一方面操作系統可以根據需要進行各種計算。這種關系本身在過去,現在或者將來都可以實現,但現在目前Java並沒有在Linux界喚起多大的興趣,原因主要在於Java和Linux群體和技術在原則性和專業性上存在差異造成的。
原則性的差異涉及開放源碼和免費軟體這兩個術語。Java既不開放也不免費,而Linux堅持這兩個原則,至少在理論上是這樣。此外,Java倡導者也必須明白,在Linux界存在著一個明顯的分歧,大部分Linux人士都非常注重「free」這個詞,雖然有些人是從經濟上來了解這個詞,但無論怎樣他們都堅持開放源碼的原則。盡管Linux有向各個階層推廣的趨勢,但目前來說自由軟體的積極倡導者主要來自世界各大學的學生和研究人員。他們對Linux的發展是非常關鍵的,為開發Linux和操作系統軟體輸送了大批的人才。
開放源碼和Linux的商業價值取決於那些用Linux為市場開發產品的開發人員,以及喜歡根據自己需要用Linux對操作系統進行自定義的人們。如果必要,這些人會出錢購買Linux,因為它是一種開放的源碼。他們對Linux的發展也是至關重要的,否則,Linux將只是一堆計算機課程和深奧的研究課題。
H. 怎樣在linux下進行java編程
linux下java編程與在windows下一樣,重點在於搭建java開發環境。
linux下搭建java開發環境步驟:
1、下載linux環境下的JDK,前往java官網下載:http://www.java.com/zh_CN/
舉例:
JDK程序名為:jdk-7u11-linux-i586.tar.gz 保存路徑:/home/wyl/tools-wyl/JDK7u11
eclipse程序名為:eclipse-jee-juno-SR1-linux-gtk.tar.gz 保存路徑:/home/wyl/tools-wyl/eclipse-javaEE
2、解壓下載的jdk-7u11-linux-i586.tar.gz文件
chmod 777 jdk-7u11-linux-i586.tar.gz
tar xzvf jdk-7u11-linux-i586.tar.gz(普通用戶身份解壓即可)
3、配置環境變數
以超級用戶身份執行下面的命令:
#vim /etc/profile
在文件末尾加上以下內容後保存退出(:wq)
export JAVA_HOME=/home/wyl/tools-wyl/JDK7u11/jdk1.7.0_11(說明:這個是JDK解壓後文件夾的路徑)
export PATH=$JAVA_HOME/bin:$PATH或export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.
4、注銷重新登錄後在終端輸入java,javac,java -version,javac -version.測試是否安裝成功。
[wyl@localhost eclipse-javaEE]$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) Server VM (build 23.6-b04, mixed mode)
[wyl@localhost eclipse-javaEE]$ javac -version
javac 1.7.0_11
[wyl@localhost eclipse-javaEE]$
5、解壓eclipse-jee-juno-SR1-linux-gtk.tar.gz 並運行它(chmod 777 eclipse...)
5.1、解壓:tar xzvf eclipse-jee-juno-SR1-linux-gtk.tar.gz (普通用戶身份解壓即可,否則每次都要以超級用戶身份運行它)。
5.2、運行:進入解壓後的目錄,執行命令:./eclipse即可運行eclipse.或者進入解壓後的目錄,雙擊eclipse圖標即可。
運行eclipse即可進行java編程。