Как перейти к сетевому узлу в JFileChooser?
У меня есть JFileChooser, и мне нужно программно установить его currentDirectory на сетевой хост, содержащий несколько общих ресурсов SMB (например,\\blah
). Технически это не «каталог», а скорее папка оболочки, представляющая список доступных общих ресурсов.
У JFileChooser нет проблем с переходом к определенной папке (например,\\blah\someShare
), но не может обработать сам «каталог» хоста (например,\\blah
).
Пользователи могут перейти к таким «каталогам» внутри JFileChooser, перейдя через папку оболочки «Сеть» или найдя определенный общий ресурс и перейдя к его родительскому каталогу. Отладка показывает, что скрытый каталог представлен в видеWin32ShellFolder2
, До сих пор все мои попытки программно установить currentDirectory провалились.
new File("\\\\blah")
может быть создан, но на самом деле не существует с точки зрения Java.
chooser.setCurrentDirectory(new File("\\\\blah"));
Не удается, потому чтоJFileChooser
проверяет, существует ли данный каталог, иnew File("\\\\blah").exists()
возвращает ложь
File dir = new File("\\\\blah").getCanonicalFile();
Сбой с исключением:
java.io.IOException: Invalid argument
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:428)
at java.io.File.getCanonicalPath(File.java:618)
at java.io.File.getCanonicalFile(File.java:643)
File dir = ShellFolder.getShellFolder(new File("\\\\blah"));
Сбой с исключением:
java.io.FileNotFoundException
at sun.awt.shell.ShellFolder.getShellFolder(ShellFolder.java:247)
File dir = new Win32ShellFolderManager2().createShellFolder(new File("\\\\blah"));
Сбой с исключением:
java.io.FileNotFoundException: File \\blah not found
at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Win32ShellFolderManager2.java:80)
at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Win32ShellFolderManager2.java:64)
Path dir = Paths.get("\\\\blah");
Сбой с исключением:
java.nio.file.InvalidPathException: UNC path is missing sharename: \\blah
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)
at java.nio.file.Paths.get(Paths.java:84)