我有一些文件要使用unix排序工具进行附加和排序。然后我们将使用Java来处理排序后的文件。
最初,我想使用bash shell脚本进行排序,在脚本文件的后面部分,我调用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发布于 2011-07-13 15:31:09
如果你想使用Java,你应该把这个脚本逻辑重写成Java,以提高可移植性。这是一个简短的脚本,所以不会很难。你可以在这里找到:Optimal way to sort a txt file in Java。
但这取决于场景和用法。可以编写具有良好日志记录脚本;)
发布于 2011-07-13 15:30:32
我不认为“更好的日志记录”是从java执行shell脚本的原因。java进程只需要将要处理的文件的名称作为参数。如果可能的话,可以直接在终端上进行针刺处理。这样,你的java程序也是可移植的。但需要了解整个用例才能做出正确的决策。
发布于 2011-07-13 16:00:31
shell脚本简单地将当前目录中的所有ABC_*.DAT文件连接到一个文件/home/app/xyz/data/unsorted.DAT中,然后将/home/app/xyz/data/unsorted.DAT中的内容排序到sorted.DAT中。最后,脚本将调用一个Java程序来处理sorted.DAT。
您可以从Java进行文件读取、连接和排序。如果您需要一些帮助器类来处理目录中的文件等,那么我建议使用Apache Fileutils。因此,如果我建议探索放弃shell脚本的可能性,那么将所有处理合并到一个Java程序中,并在这种(显然)简单的情况下避免使用Runtime.exec()。
https://stackoverflow.com/questions/6675391
复制相似问题