2010-11-02 49 views
0

我參考了這個example並創建了一個servlet應用程序。在Java代碼中使用文件路徑

它的工作原理與在代碼中提到的TMP_DIR & dest_dir將路徑完全正常(我創建了一個在C盤名爲tmp文件夾&也是我創建了一個名爲files我的應用程序文件夾內的文件夾中。

現在我將代碼轉移到一臺linux機器上,因爲沒有名爲C的驅動器,所以這不起作用:我嘗試在我的應用程序文件夾中將代碼的c:\\tmp替換爲/tmp(並創建了一個文件夾tmp),但它沒有如何使該代碼具有通用性?請指教。

+0

重複的[錯誤而從Windows轉移到Linux機器JSP代碼(http://stackoverflow.com/questions/4079934/error-while-migrating -jsp-code-from-windows-to-linux-machine) – BalusC 2010-11-02 18:47:56

回答

2

如果您想要的是臨時目錄,請使用http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html並查找getTempDirectory()。這應該在任何地方工作

所以你需要系統提供的系統臨時目錄。你可以通過它的路徑或通過實際的文件來獲得這個。 (IOUtils提供了兩種方法)。這裏; S的IOUtil文檔: getTempDirectory

public static File getTempDirectory() 

    Returns a File representing the system temporary directory. 

    Returns: 
     the system temporary directory. 

所以,如果你寫:

File myTempFile = IOUtils.getTempDirectory(); 

然後myTempFile將要寫入。

如果某個應用程序按名稱查詢目錄,則可以使用getTempDirectoryPath() 這將給出路徑名。

在您的例子我會寫:

private static final String TMP_DIR_PATH = IOUtils.getTempDirectoryPath(); 

或使用@羅布麻的做法:

private static final String TMP_DIR_PATH = System.getProperty("java.io.tmpdir"); 

我希望他們給了相同的答案。

如果你仍然感到困惑,繼續問 - 這就是爲什麼!

更新:如果你正在做任何東西與文件它值得熟悉Apache的FileUtils和IOUtils。有幾件事JDK不擅長或自然地做,Apache提供更好的支持。

+0

我很困惑如何在我提到的例子中使用這個getTempDirectory()..你能解釋一樣嗎?我是java的初學者... – LGAP 2010-11-02 17:49:57

+0

'Readcsv.java:29:無法找到符號 符號:變量IOUtils location:class Readcsv'將IOUtils.getTempDirectoryPath()添加到源代碼時出現此錯誤.. – LGAP 2010-11-02 18:08:49

+0

您需要從Apache加載IOUtils類庫(參見http://commons.apache.org/io/並使用下載)。這應該給你一個你放入classpath的jar。在開發時嘗試引入Maven,因爲它會照顧這些依賴關係。 – 2010-11-02 18:12:36

2

使用File.pathSeparator來獲取與系統相關的路徑分隔符。

編輯:

如果你只是想要一個臨時目錄,然後使用File.createTempFile(..)

示例文件路徑:http://www.exampledepot.com/egs/java.io/ConstructFilePath.html

例臨時文件:http://www.exampledepot.com/egs/java.io/CreateTempFile.html

編輯:

在Serv中保存文件讓環境:here

+0

如果你能解釋我如何在我的代碼中使用相同的代碼,那將會很棒嗎? – LGAP 2010-11-02 18:43:07

+0

Post modified .. – 2010-11-02 19:20:33

+0

'private static final String TMP_DIR_PATH = File.separator +「webapps」+ File.separator +「Readcsv」+ File.separator +「tmp」;'我在我的代碼中使用了這個。但是我得到錯誤:'javax.servlet.ServletException:\ webapps \ Readcsv \ tmp不是目錄 ' – LGAP 2010-11-02 19:28:58

2

用於保存臨時文件的平臺特定目錄的位置由屬性java.io.tmpdir定義。

所以在你的代碼,你可以使用:

private static final String TMP_DIR_PATH = System.getProperty("java.io.tmpdir") 
+0

我的實際任務是讀取csv文件上的內容並將其添加到數據庫中。當我使用你的代碼時,這個任務在Windows系統中完成。但是,當使用Linux服務器時,csv文件沒有正確讀取,結果表示'0項已添加到我的數據庫中' – LGAP 2010-11-02 18:11:53

+0

另一個信息:我正在使用我的Windows機器上的Linux服務器。在瀏覽器中使用'http://192.168.0.85:8080/Readcsv/uploadcsv.jsp'。其中85是linux的系統編號。 – LGAP 2010-11-02 18:13:29

+0

我希望你不會在錯誤迴應中使用'你'。 – AHungerArtist 2010-11-02 21:43:01