2010-06-25 26 views
1

我正嘗試從Unix的Java應用程序的命令行中讀取文件夾名稱。讀取Unix上的Java命令行參數

我有一個的ksh腳本(test.ksh),它有行:

java SomApp $* 

我想,如下執行此:

test.ksh ../folder 

但失敗;我的意思是我的Java應用程序說「../文件夾」下沒有任何內容,雖然有一些文件。

如何在Unix上讀取這樣的相對路徑?

+3

你能發表實際的錯誤嗎?另外發布你正在使用的代碼行來讀取文件夾名稱也可能是一個好主意。 – TofuBeer 2010-06-25 16:35:35

回答

1

這並不完全清楚你想要做什麼。

--snip--

如果你希望你的文件夾作爲參數傳遞給你的指揮下每個文件名,你可以試試

java SomeApp `ls ../folder` 

...這將防止執行ls命令.. /文件夾並替換輸出(在../文件夾下的文件列表)。

+1

什麼shell需要單引號?與../folder/*更習慣嗎? – erickson 2010-06-25 16:42:51

+0

建議單引號,因爲我誤解了其中一個askers評論 - 關於重讀同意,從答案中刪除。至於什麼是習慣,我不知道 - 我的回答是第一個彈出到我的頭,但../文件夾/應該工作,但包括輸出中的相對路徑信息,這可能是提問者想要的,不能告訴。 – Brabster 2010-06-25 17:08:57

0

這是一個簡單的程序,用於在命令行中指定的目錄中列出文件。

public static void main(String... argv) { 
    File[] list = new File(argv[0]).listFiles(); 
    for (File f : list) { 
    System.out.println(f.getAbsolutePath()); 
    } 
} 
0

關鍵問題是「Java應用程序是否期望目錄名稱或文件名列表?」

如果應用程序需要一個目錄名稱,您似乎給了它一個目錄名稱。除非你的shell腳本執行了一些意想不到的事情,比如更改工作目錄(cd),否則問題很可能出現在應用程序中。

如果應用程序需要一個文件名列表,那麼您應該傳遞它的文件名而不是目錄名。這可能只是:

./test.ksh ../folder/* 

或者你可能需要更多的選擇,如果文件夾還包含子文件夾和應用程序將通過文件夾名稱,而不是文件名被打亂。