2012-12-12 112 views
1

好奇的小問題,我遇到了這裏的可選參數運行的JAR:創建具有

我想一個客戶端能夠做一些事情,如:

(1)java -jar myJar.jar inputFile outputFile

(2)java -jar myJar.jar text outputFile

outputFile是可選參數。 (2)它們提供我的程序將直接使用的輸入。儘管我可以想到,但無法確定參數是否是輸入或是否是文件的位置。對於一般的命令行來說,你可以指定一個像-i inputfile這樣的標誌來表示你希望它從文件中讀取。我在這裏選擇哪些方法來保持客戶端的易用性?

我唯一的選擇是創建客戶端必須使用的第一個參數的語法嗎?即

"-t text""-i inputFile"

我已經見過類似於commons cli這樣的庫,可以啓用此功能,但我更喜歡不涉及使用庫的解決方案。

回答

1

如果我理解正確的問題,你不能只檢查數量而不是明確指定直接輸入?就像,如果一個arg被傳遞,第一個arg被輸出,並且如果兩個args被傳遞,那麼第一個arg被輸入並且第二個arg被輸出?

就這樣說 - 使用連字符的'選項'語法對大多數習慣於cli的人來說可能是最簡單的。

+0

耶認爲我會被迫做這個。謝謝! – thatidiotguy

1

我建議從標準輸入(System.in)讀取並打印到標準輸出(的System.out)

這樣一來,不需要的參數。對於使用CLI工具的人來說,這非常直觀。你可以留下輸入來自操作系統的細節。

所以在UNIX操作系統,你可以使用你的罐子是這樣的:

echo "some test" | java -jar myjar.jar > outfile 

cat somefile | java -jar myjar.jar > outfile 
+1

這個jar會被其他程序執行。程序的輸出取決於所提供的參數。它可能不是什麼,或者是文本輸出。我不確定我的理解是如何幫助解決可能的參數誤解。 – thatidiotguy

+0

你說得對,這個建議並不能解決你的參數問題。但這是一個更好的選擇。根本不使用參數,而是將輸入輸出到程序輸出。 – rompetroll

1

可以使用

input=text or file=inputfile 

(與輸出= OUTPUTFILE可選的)。

在這種情況下,您可以用相同的方式處理所有參數,並用分隔符'='分隔它們,檢查'='的左側以確定它是哪個參數。

+0

感謝您的輸入。 Cubic雖然速度更快。反正無論如何 – thatidiotguy