JFileChooserで選択したファイルからUNCパスを返す方法があるかどうか疑問に思っています。選択するファイルは、UNCパスを持つマップされたドライブにあります。今のところ、マップされたドライブのドライブ文字を引き戻すことしかできないようです。
4 に答える
このJFileChooser
メソッドgetSelectedFile()
は、を返しFile
ます。これには役立つ情報が含まれている可能性があります。
「MicrosoftWindowsプラットフォームの場合、…UNCパス名のプレフィックスは"\\\\"
;ホスト名と共有名は名前シーケンスの最初の2つの名前です。」
Gerry's answer にコメントしたようにShellFolder.getDisplayName
、ユーザーは表示名を好きなように変更できるため、信頼できません。
ただし、UNC パスは 経由で利用できるようですsun.awt.shell.ShellFolder
。これはもちろん「内部専用 API」であるため、Java の将来のバージョンで引き続き機能するという保証はありませんが、Windows 7 で Java 1.8.0_31 に対してテストする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 を介して [属性] から取得したものと一致するように見えます。「属性」がどこから来たのか、または英語以外のロケールで変更されるのかどうかはわかりません。
他の誰かが別の (そしてもっと簡単だと思う) 解決策を探している場合は、ShellFolder.getDisplayName() を使用して情報を見つけることができます。たとえば、次の文字列からドライブのネットワーク上の場所を解析できます。
System.out.println(ShellFolder.getShellFolder(new File(filePath.substring(0,3))).getDisplayName());
これも役に立つかもしれません:
File.listRoots();