2016-08-03 103 views
-1

當我嘗試在UNC路徑中使用JAR文件時,發現遇到了問題。 java.io.file的構造函數將始終將UNC文件路徑轉換爲本地路徑。處理UNC文件路徑的Java.io.file構造函數

例如,我嘗試

String dirStr = "file:\\\\dir1\dir2\file.jar!Myclass"; 
File ff = new File(dirStr); 
System.out.println(ff.toString()); 

我會得到輸出如下:file:\dir1\dir2\file.jar!Myclass。但我期望得到的是file:\\dir1\dir2\file.jar!MyClass

我試圖在dirStr中添加更多斜槓,但它無法工作。因爲在java.io.file中,它會調用方法來刪除重複的斜線。我試圖用URI創建ff。但輸出將是\dir1\dir2\file.jar!Myclass,不能用於成功使用JAR文件。我認爲JAR的格式必須以file:協議開始,以便使用上面的字符串\dir1\dir2\file.jar!Myclass解析以!結尾的字符串。

有什麼辦法可以​​得到File的路徑名,即ff,就像file:\\dir1\dir2\file.jar!MyClass一樣。

+0

我認爲'file:'前綴通常用於本地路徑。 UNC路徑不是本地路徑。嘗試不使用'file:'前綴,即'\\ dir1 \ dir2 \ file.jar!MyClass'。你也可以嘗試使用正斜槓,'//dir1/dir2/file.jar!MyClass' – janos

+0

爲什麼你認爲你必須提供一個URL到'File'構造函數?你不能,也不必。不清楚你真的在這裏問什麼。 – EJP

+0

因爲我需要在UNC路徑中使用JAR文件。當您的java CLASSPATH包含遠程UNC路徑時,您將遇到此問題。它會像'dirStr'一樣解析JAR文件。 –

回答

0

由於您的輸入dir字符串是UNC類型,我認爲您應該使用Java的URI
示例代碼:

URI uri = new URI(dirStr); 
System.out.println(uri.toString()); // If you want to get the path as URI 
File ff = new File(uri.getPath()); // If you want to access the file. 


其他更好的辦法是使用路徑:

URI uri = new URI(dirStr); 
Path path = Paths.get(uri); // Or directly Path path = Paths.get(dirStr); 
File ff = path.toFile(); // << your file here 
path.toUri(); // << your uri path here 
+0

我已經試過這段代碼,'ff'就會像'\\ dir1 \ dir2 \ file.jar!MyClass'沒有'file:'一樣。 –

+0

所以你只需要'uri.toString()'。 – Minh

+0

我編輯了示例代碼,請檢查它。 – Minh

0

構造File(String)需要一個路徑,而不是URL。刪除file:部分,併爲實際文件名中的每一個使用兩個反斜槓,以滿足編譯器的轉義規則。或者使用正確數量的正斜槓。

+0

事實上,我沒有使用URL,而是使用URI。 –

+0

如果我刪除'file:',它將無法找到JAR文件。我想這是因爲字符串「.jar」後面有一個'!'。 –

+0

如果你必須有'file:'你不應該使用'File'。正如我已經說過的那樣,兩人不會在一起。 – EJP