2013-12-16 64 views
1

我有訪問共享文件夾的情況。 以下是一個Java程序示例。Java文件系統:UNC路徑丟失共享名

import java.nio.file.*; 

/** 
* Test 
*/ 
public class Test 
{ 
    public static void main(String[] args) 
    { 
    String strPath = "//WG0202"; 
    Path path = FileSystems.getDefault().getPath(strPath).getRoot(); 
    if (path != null) 
    { 
     System.out.println(path.toFile().exists()); 
    } 
    } 
} 

讓我們假設如下 - 計算機名稱:WG0202

在這臺電腦的共享文件夾是:TestFolder

所以,如果我給的路徑爲:// WG0202/TetFolder

然後它工作正常。

但是,如果我給的路徑:// WG0202

然後,它與下面的異常失敗 -

 
Exception in thread "main" java.nio.file.InvalidPathException: UNC path is missing sharename: //WG0202 
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:118) 
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) 
    at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94) 
    at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255) 
+0

我不相信Windows SMB將允許你共享這樣的「根」。實質上,我想說的是,我不相信SMB協議中存在沒有路徑的共享概念。我相信,在Windows中,當你這樣做時,它會觸發SMB調用來列出可用的共享。在您的測試代碼中,您依賴的操作系統(從上下文來看似乎是Windows)來處理與遠程主機的連接。您試圖依賴的功能可能寫入Windows資源管理器,而不是基本操作系統。不過,只是一個預感。 – CodeChimp

+0

是的,它是Windows操作系統。 – Subbu

回答

1

從文件的Official Javadoc

用戶界面和操作系統使用與系統相關的路徑名稱 字符串來命名文件和目錄。該課程提供了一個 抽象的,與系統無關的分層路徑名稱視圖。一個 抽象路徑名有兩個組成部分:

  1. 可選系統有關的前綴字符串,如磁盤驅動器符,"/"爲UNIX根目錄,或"\\\\"爲Microsoft 視窗UNC路徑名稱

  2. 零個或多個字符串名稱的序列。

在抽象路徑名的 名字可能是一個目錄名或在 情況下的Microsoft Windows UNC路徑名,主機名的。抽象路徑名中的每個後續 表示一個目錄;姓氏可能是 表示目錄或文件。空的抽象路徑名有 沒有前綴和一個空的名字序列。

+0

如果碰巧如上面那樣給出那個主機名,那麼我們是否應該得到異常? – Subbu

+0

我不這麼認爲。 –

2

UNC路徑實際上是由主機和共享組成的。 您試圖在沒有共享的情況下使用UNC,因爲您的例外情況如此。

澄清:

//WG0202/TestFolder 

是一個有效的UNC路徑:

//WG0202/ 

不是。

乾杯