[英]Run .sh File in Java Code on Linux Machine
我的任務: 1-讀取Excel文件,對其進行解析並將數據保存在txt文件中。 2-讀取該txt文件,並將其傳遞給batch.sh文件。 這個batch.sh文件做一件事,它從上述txt文件中選擇數據並將其保存在數據庫表中。
當我從終端運行batch.sh文件(並給它txt文件)時,它工作正常。 它就像我想要的那樣將記錄插入數據庫中。
問題是 ,當我想對Java代碼執行相同操作時, batch.sh文件不起作用。 而且,不會引發異常。
一些解釋:我正在使用Java 7,Oracle,SQL-Loader,Linux。
附加信息:如果我將batch.sh文件重命名為batch.bat文件並在Windows環境中運行它,則可以正常工作。 如果從終端執行,batch.sh文件也可以正常工作。 唯一的問題是,它不適用於Java代碼。
我列出了以下任務的Java代碼段,batch.sh文件和control.txt文件。
Java代碼:
try{
String target = new String("/path/to/batchFile/batch.sh");
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(target);
proc.waitFor();
}catch(Exception e){
LOG.error("Exception Occured with Message : "+e.getMessage());
}
Batch.sh:
sqlldr username/password@sid control='/path/to/batchFile/control.txt' log='/path/to/batchFile/Results.log' bad='/path/to/batchFile/BadFile.bad' ERRORS=5000
control.txt:
options ( skip=1 )
load data
infile '/path/to/batchFile/TxtFileData.txt'
truncate into table TABLE_NAME
fields terminated by ","
(
column_name "replace(:column_name,'-','')"
)
PS: 我已經閱讀了很多有關同一問題的文章,並嘗試了每種解決方案,但沒有奏效。 Java代碼的當前示例來自另一個StackOverFlow線程。
任何幫助將不勝感激。
您需要runtime.getRuntime.exec(new String[]{"/bin/bash", "-c", "/path/to/script.txt"})
請參見此處: 如何執行帶參數的命令?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.