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