Как я прокомментировал ответ Джерри, ShellFolder.getDisplayName
ненадежен, поскольку пользователь может изменить отображаемое имя на любое желаемое.
Однако путь UNC, кажется, доступен через sun.awt.shell.ShellFolder
.Это, конечно, «внутренний проприетарный API», поэтому нет гарантии, что он продолжит работать в будущих версиях java, но при тестировании на java 1.8.0_31 в Windows 7 я вижу ShellFolderColumnInfo
под названием Attributes
, который для сетевых дисков выглядит каквключите путь UNC как голый String
.Например:
File networkDrive = new File("G:\");
ShellFolder shellFolder = ShellFolder.getShellFolder(networkDrive);
ShellFolderColumnInfo[] cols = shellFolder.getFolderColumns();
for (int i = 0; i < cols.length; i++) {
if ("Attributes".equals(cols[i].getTitle())) {
String uncPath = (String) shellFolder.getFolderColumnValue(i);
System.err.println(uncPath);
break; // don't need to look at other columns
}
}
Если вы перейдете в «Мой компьютер» в проводнике, перейдите в представление «Подробности» и включите столбец «Сетевое расположение», он будет соответствовать тому, что мы получаем из «Атрибутов» через ShellFolder
API.Не уверен, откуда берутся «Атрибуты» или они меняются в неанглийских локалях.