2014-01-13 19 views
0

請考慮以下幾點: 我得到了一個csv文件。該文件存儲在tomcat wepapps目錄中。此目錄的路徑取決於所使用的計算機。有些用戶使用不同的位置來使用他們的Tomcats並使用不同的名稱。我想實現以下。從Tomcat webapps上讀取不同雄貓上的文件

通過Spring我做了以下操作: 我得到一個操作,它將一些數據從csv導入數據庫。

<bean id="setCsvPathAction" class="custom.action.importcsv.SetCsvPathAction"> 
    <property name="csvPath" value="C:/temp/test.csv"/> 
</bean> 

這對我很好。爲了讓這個路徑對其他人更可配置,我得到了一個system.properties文件。有了這個文件,你可以很容易地覆蓋屬性:

setCsvPathAction.csvPath=#{tomcat_home}/webapps/test.csv 

這就是我想要的。我希望路徑位於Tomcat webapps目錄中。上述不起作用。你有什麼提示如何做到這一點?

回答

0

大多數使用tomcat的人都會設置CATALINA_HOME環境變量。您可以查詢此環境變量並檢索值。

String tomcat_home = System.getenv("CATALINA_HOME"); 
if(tomcat_home){ 
    setCsvPathAction.csvPath=tomcat_home+"/webapps/test.csv" 
} 

注:有沒有保證這個環境變量的每個系統上使用Tomcat

更多的getenv()設置 - http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#getenv%28%29

+0

我想在bean的屬性中設置路徑。我不能寫任何代碼。 – Chris311

+0

是的,你可以。您已經在使用屬性文件。您可以以編程方式添加到屬性文件。在應用程序初始化時執行此操作。 – unekwu

+0

我不認爲你們兩個以正確的方式理解我。我會將產品交付給客戶。我不想讓他設置他的webapps文件夾的路徑。這就是爲什麼我爲他做這件事,並在屬性文件中寫入路徑。如果他想改變路徑,他只需要在.properties文件中配置它。這就是爲什麼我不能以編程方式設置它。如果我可以在.properties文件中寫下如下內容:「setCsvPathAction.csvPath =#{tomcat_home} /webapps/test.csv」,它會很棒。 – Chris311

0

如果要在網絡應用程序你也可以使用類加載器來獲得本地路徑,所以你不必配置任何東西。 ();////////// root /「);

+0

我想設置一個bean屬性的路徑。我不能寫任何代碼。 – Chris311

+0

這就是我所說的。你不需要這樣設置任何東西。對於你來說配置是一件小事。由於從示例中它是您的bean,您可以將其更改爲從ClassLoader獲取路徑位置,而不必對其進行配置。 – BrianC

+0

我不明白。你能讓我更清楚嗎? – Chris311

0

.properties文件的解決方案是:$ {catalina.home} 接下來我需要獨立於系統環境的FileInputStream。我試過以下內容:

public class environmentTest { 

    public static void main(final String[] args) { 
     System.out.println(System.getenv("CATALINA_BASE")); 
    } 

} 

null打印在控制檯上。

Person類包含jpg文件的名稱。該文件位於webapps文件夾中。我希望路徑獨立於所使用的計算機。我試過如下:

File file = new File(System.getenv("CATALINA_HOME") + "/webapps/" + person.getPhoto()); 
FileInputStream fileInputStream = new FileInputStream(file); 

可悲的是,這並不因爲工作,因爲unekwu說,這個環境變量沒有設置在所有系統上。你有什麼想法在這種情況下我能做些什麼?