2013-04-04 43 views
1

我想從我的JARs本地目錄中讀取一個config.properties文件,它從一個網站運行。我已經嘗試了很多不同的代碼,從它流,這是讓類路徑,等等。最後一個,現在我想爲下面的代碼:Java從web目錄讀取屬性文件

 FileInputStream f = new FileInputStream("./config.properties"); 
     if(f != null) { 
      prop.load(f); 
      db = prop.getProperty("database"); 
      dbuser = prop.getProperty("dbuser"); 
      dbpass = prop.getProperty("dbpass"); 
      host = prop.getProperty("host"); 
      iloc = prop.getProperty("iloc"); 
     } 

這完全評估測試時,並從裏面Netbeans的運行,但第二個我放置在網絡上並運行它,它不再找到配置文件,即使它是同一目錄中的相同文件。我已經嘗試了./而沒有,結果仍然相同。

+0

這會嘗試從當前目錄中讀取文件。當前目錄是執行用於啓動Web服務器的'java'命令的目錄。你爲什麼不使用絕對文件名? – 2013-04-04 21:25:14

+0

因爲它需要在共享服務器環境中運行,無論它放在哪裏,它都需要能夠讀取它的配置文件。 :( – jfreak53 2013-04-04 21:30:06

+2

然後將配置文件嵌入到webapp本身中,並使用Class。getResourceAsStream()(如果它位於WEB-INF/classes或WEB-INF/lib中的其中一個jar中),或者ServletContext.getResourceAsStream()位於webapp的根文件夾或子目錄中。 – 2013-04-04 21:32:57

回答

1

你必須有一些絕對值或一些運行時參數。我們所做的是將應用程序作爲系統屬性。因此,在Windows啓動Java時,其/ APP1但其服務器的/ etc/APP1上

使用-D啓動Java或javaw進程時

java -Dapp.home=/etc/app1 -Dapp.other=somevalue my.package.AppMain 

然後在我們的應用程序,我們有一個文件實用程序類讀取該在靜態init中,並有一個靜態getter。

樣品

public class FileUtils{ 
    private static File appHome = null; 
    static{ 
     String home = System.getProperty("app.home");//-D that you specify or some standard that java has see javadoc 
     if(home == null){ 
      //logger as needed 
      home = "/app1"; 

     } 
     appHome = new File(home); 
    } 


    public static File getAppHome(){ 
     return appHome; 
     } 


    ... 

網站 - 運行Java的Web服務器/應用服務器的文件系統了。如果你沒有訪問它,那麼你不能編輯配置也是正確的?如果您知道路徑配置,但不能改變java命令,你可以做這樣的事情:

建議1您的開發系統上 做出這樣/dev/randome4343433Name.txt的arbitary文件,如果這個文件存在你知道你在開發中,並使用該路徑,否則去在服務器的路徑。

建議2 或使用服務器上的路徑。 即使服務器是linux並且dev是windows,您也可以使用此斜線/並在dev驅動器中創建相同的文件系統,但不要在代碼中提及驅動器號。所以如果在服務器上它的/etc/app1/config.txt然後在本地驅動器上,你開始做一個etc \ app1文件夾,並把配置在那裏和uin代碼使用「/etc/app1/config.txt」

+0

正如我上面所說,它通過HTML頁面運行在網站上,而不是從CLI運行。抱歉。 – jfreak53 2013-04-04 21:56:03

+0

你的意思是它的一個小程序?或者你沒有訪問java命令? – tgkprog 2013-04-04 21:57:05

+0

這是一個小程序。 – jfreak53 2013-04-04 21:59:52

1

For使用java.applet.Applet或JApplet獲取嵌入此applet的文檔的URL。然後創建一個新的URL,將路徑添加到config.txt中,在URL上打開輸入流並可以讀取客戶端上的文件。

記得你所做的一切是在客戶端,所以,除非您對服務器中的JSP頁面使用一些安全性(密碼)的小程序

0

在公共的配置罐子有這個,你可以不寫回,並連接到類:

PropertiesConfiguration cfg = new PropertiesConfiguration(「filePath」);

只需檢查它