2013-12-16 2 views
1

У меня есть ситуация для доступа к общим папкам. Ниже приведен пример программы Java.Файловая система Java: UNC-путь отсутствует sharename

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 Windows, UNC-путь и

  2. Последовательность нулевых или более строковых имен.

первое имя в абстрактном имени пути может быть имя каталога или, в случае Microsoft Windows UNC имен путей, имя хоста. Каждое последующее имя в абстрактном пути обозначает каталог; фамилия может быть обозначает либо каталог, либо файл. Пустой абстрактный путь имеет без префикса и пустую последовательность имен.

+0

Если это так, чтобы указать имя хоста, как указано выше, следует ли нам получить исключение? – Subbu

+0

Я так не думаю. –

2

Путь UNC действительно сделан из хоста и доли. Вы пытаетесь использовать UNC без share, так как ваше состояние исключений.

Для уточнения:

//WG0202/TestFolder 

является действительным UNC путь:

//WG0202/ 

нет.

Cheers

Смежные вопросы