在Linux机器上的Java代码中运行.sh文件

时间:2016-11-17 14:15:04

标签: java linux shell sql-loader

我的任务: 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环境中运行它,它可以正常工作。如果从终端执行批处理.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,'-','')"    
  ) 

P.S: 我已经阅读过很多关于同一问题的帖子,并尝试了所有解决方案,但非正在运行。 java代码的当前示例来自另一个StackOverFlow线程。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

你想要runtime.getRuntime.exec(new String[]{"/bin/bash", "-c", "/path/to/script.txt"}) 见这里:How to execute command with parameters?