Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该使用Runtime.exec()调用bash shell脚本吗?_Java_Shell - Fatal编程技术网

Java 我应该使用Runtime.exec()调用bash shell脚本吗?

Java 我应该使用Runtime.exec()调用bash shell脚本吗?,java,shell,Java,Shell,我有一些文件要使用unix排序实用程序追加和排序。然后我们将使用Java来处理排序后的文件 最初,我希望使用bashshell脚本进行排序,在脚本文件的后面部分,我调用Java程序。但我担心的是,shell脚本没有一个成熟的日志库,您只能重定向输出流和错误流 如果我想让日志看起来更好,我应该使用Runtime.exec()调用Java中的bash shell脚本部分,以便记录它们吗 以下是shell脚本文件: cd /home/app/xyz/data echo -n "Tot

我有一些文件要使用unix排序实用程序追加和排序。然后我们将使用Java来处理排序后的文件

最初,我希望使用bashshell脚本进行排序,在脚本文件的后面部分,我调用Java程序。但我担心的是,shell脚本没有一个成熟的日志库,您只能重定向输出流和错误流

如果我想让日志看起来更好,我应该使用Runtime.exec()调用Java中的bash shell脚本部分,以便记录它们吗

以下是shell脚本文件:

    cd /home/app/xyz/data

    echo -n "Total number of files: "
    ls | wc -l

    for file in ls ABC_*.DAT
    do
        echo "Appending" $file "..."
        cat $file >> /home/app/xyz/data/unsorted.DAT
        echo "Moving" $file "to back up folder..."
        mv $file /home/app/xyz/data/backup
    done

    sort -t ',' -k 1,1 -k 5,7 -k 2,2r unsorted.DAT -o sorted.DAT

    CALL JAVA_PROGRAM sorted.DAT

我不认为“更好的日志记录”是从java执行shell脚本的理由。java进程只需要将要处理的文件名作为参数。如果可能的话,可以直接在终端上进行穴位处理。这样,您的java程序也是可移植的。但是需要知道整个用例才能做出正确的决定。

如果你想使用Java,你应该将这个脚本逻辑重写为Java以提高可移植性。这是一个简短的剧本,所以不难。你可以看看这里:


但这取决于场景和用例。可以使用良好的日志记录编写脚本;)

shell脚本只需将当前目录中的所有
ABC.*.DAT
文件连接到一个文件
/home/app/xyz/data/unsorted.DAT
,然后将内容排序为
/home/app/xyz/data/unsorted.DAT
。最后,脚本将调用一个Java程序来处理
sorted.DAT

您可以从Java中读取、连接和排序文件。如果您需要一些助手类来处理来自目录等的文件,那么我建议您。因此,如果我建议探索放弃shell脚本的可能性,将所有处理整合到一个Java程序中,并避免在这种(显然)简单的情况下使用
Runtime.exec()