2012-03-23 30 views
2

我正在研究處理放置在目錄中的大量文件的應用程序。我想將由我的應用程序處理的每個文件的完全限定路徑插入到數據庫中。如果已經由應用程序處理過的文件被重新提交以供用戶重新處理,那麼我想通過指定文件的完全限定路徑來刪除爲該文件處理的所有數據,然後繼續該文件就像是一個新文件一樣。如何在Java中將特定於平臺的路徑插入到數據庫中

,我現在面臨的問題是,當我運行通過Eclipse的應用程序,插入到數據庫的路徑名稱如下: -

D:\Trunk\App\Source 

AFER我與它的路徑串聯的文件名(pathString + File.seperator + fileNameString)即插入數據庫的完全合格的路徑如下

D:\Trunk\App\Source/file1.txt 

但是,如果我創建我的應用程序罐子和瓶子運行通過雙擊罐子,路徑名插入到數據庫中就如同低點: -

D:/Trunk/App/Source 

後,我與它的路徑(pathString + File.seperator + fileNameString)串聯文件名稱即插入到數據庫中的完全合格的路徑如下

D:/Trunk/App/Source/file1.txt 

的應用如果通過雙擊jar而不是從eclipse運行應用程序來運行應用程序,則無法刪除重新提交用於處理的文件的數據。用於刪除查詢,無論是從Eclipse或通過雙擊的jar

delete from file_table where where file = 'D:\Trunk\App\Source/file1.txt' 
+2

不能你堅持一種類型的文件分隔符嗎?例如。將所有/轉換爲\插入時,同時檢查數據庫 – 2012-03-23 07:10:25

+0

這可以工作。雖然我的應用程序在完成處理所有文件後會生成.csv報告。此報告包含其中一列中每個文件的路徑。這給我們帶來了我面臨的第二個問題,即報告中顯示的路徑應該是平臺特定的,以便更有意義 – CKing 2012-03-23 07:24:28

回答

1

將路徑轉換爲URI並存儲到數據庫中。然後從URI重新創建文件。

String uriName = new File(path).toURI().toString()

String path = new File(new URI(uriName)).getAbsolutePath();

+0

這似乎像Windows上的魅力一樣工作。我沒有足夠的空間讓我的電腦上的Linux分區在Linux上進行測試。這也可以在Linux上運行嗎?另外,我直接嘗試了file.getAbsolutePath,而不是使用URI,並且它似乎也以這種方式工作。 toURI方法和URI類相比直接使用file.getAbsolutePath提供了什麼好處 – CKing 2012-03-23 12:47:40

+0

它是unix的工作原理。您可以改爲File.getCanonicalPath()。 URI(不推薦使用URL)始終使用「file:/ home/user/workspace/a.txt」格式的「/」 - 您不需要轉換爲「\」 – 2012-03-23 13:01:55

+0

感謝您的快速響應。我使用/作爲分隔符,我打電話給file.getAbsolutePath,它似​​乎在Windows上很好。我是否需要將file.getAbsolutePath更改爲file.getCanonicalPath以保證安全? – CKing 2012-03-23 13:05:57

2

運行的應用程序只是轉換爲您處理所有文件路徑都"\""/"或反之相同。

+0

儘管這是一個有效的解決方案,但我正在尋找一種更通用的解決方案,我不必明確地執行全部替換我的應用程序。 – CKing 2012-03-23 07:33:20

相關問題