2011-07-13 22 views
0

我有一些文件需要使用unix排序工具進行附加和排序。然後我們將使用Java來處理排序後的文件。我應該使用Runtime.exec()來調用bash shell腳本嗎?

最初我想使用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 

回答

0

我不認爲「更好的日誌記錄」是從Java執行shell腳本的一個原因。 java進程只需要將該文件的名稱作爲參數進行處理。如果可能的話,可以直接在終端上進行實時處理。這樣,你的Java程序也是可移植的。但是需要知道整個用例才能做出正確的決定。

2

恕我直言,如果你想使用Java,你應該將這個腳本邏輯重寫爲Java以提高可移植性。這是一個簡短的腳本,所以它不會很難。你可以看看這裏:Optimal way to sort a txt file in Java

但它取決於場景和用例。它可以編寫腳本好的日誌;)

0

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()