簡體   English   中英

我應該使用 Runtime.exec() 來調用 bash shell 腳本嗎?

[英]Should I use Runtime.exec() to call bash shell script?

我有一些文件要使用 unix 排序實用程序進行附加和排序。 然后我們將使用 Java 來處理排序后的文件。

最初我想使用 bash shell 腳本進行排序,在腳本文件的后面部分,我調用 Java 程序。 But my concern is that shell script doesn't have a mature log library, you can only redirect output stream and error stream.

如果我希望日志更好看,我是否應該使用 Runtime.exec() 調用 bash shell 腳本部分 Java 以便我可以記錄它們?

以下是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,您應該將此腳本邏輯重寫為 Java 以提高可移植性。 這是一個簡短的腳本,所以不會很難。 你可以看這里: Optimal way to sort a txt file in Java

但這取決於場景和用例。 可以編寫具有良好日志記錄的腳本;)

我不認為“更好的日志記錄”是從 java 執行 shell 腳本的原因。 java 進程只需要將要處理的文件名作為參數。 如果可能,可以直接在終端上進行實際處理。 這樣,您的 java 程序也是可移植的。 但是需要了解整個用例才能做出正確的決定。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM