現在、JavaデスクトップAPIを使用して、エクスプローラーを操作しています。エクスプローラーを開く方法は知っていますが、指定したファイルを開いて強調表示する方法はわかりません。
Chromeを使用しているため、ファイルをダウンロードした後、「フォルダーに表示」を選択してエクスプローラーを開き、ダウンロードしたファイルを強調表示できます。
JavaデスクトップAPIを使用する方法?またはJavaはこのアクションを実現できますか?
使用:Runtime.getRuntime().exec("Explorer.exe /select," + path);
これは、PATH
にスペースがある場合にも機能します。
Desktop APIはこれをサポートしていません。 Explorer.exeを明示的に実行するには ProcessBuilder
(または Runtime.exec()
)を使用する必要があります 必要なオプション 。ただし、これはWindowsでのみ機能します。別のOSでこれを実行する場合は、とにかくDesktop APIを使用する必要があります。
Process p = new ProcessBuilder("Explorer.exe", "/select,C:\\directory\\selectedFile").start();
編集:
Java 9現在、デスクトップAPIにはファイルを選択するメソッドがあります
desktop.browseFileDirectory(<file>)
編集:
JavaデスクトップAPIを使用して特定のファイルを強調表示することはできません。
元の質問に対する回答:
Desktop APIでは、このスニペットを使用してこれを行うことができますが、
File file = new File ("c:\<directory>");
Desktop desktop = Desktop.getDesktop();
desktop.open(file);
上記で使用されるコードのドキュメントは、これらのリンクにあります http://docs.Oracle.com/javase/10/docs/api/Java/awt/Desktop.html および http ://docs.Oracle.com/javase/10/docs/api/Java/io/File.html
これは、Windowsコンピューターではデフォルトのファイルエクスプローラーを開き、他のシステムではそれぞれデフォルトのエクスプローラーを開きます。
または、新しいJava Path APIを使用して必要なパスを作成し、対応するFileオブジェクトを返すメソッドを呼び出すこともできます。
簡潔にするために、デスクトップおよびファイルオブジェクトが存在することを確認するためのチェックコードを除外しました。
コマンドラインから特定のパスを開くには:
start C:/ProgramData
Javaでは、特定のパスでWindowsエクスプローラーを開くことができます。
プロセスクラス(既に回答済み)を使用しますが、開始コマンドを使用します
try {
Process builder = Runtime.getRuntime().exec("cmd /c start C:/ProgramData");
} catch (IOException e) {
e.printStackTrace();
}
デスクトップクラスを使用する
try {
Desktop.getDesktop().open(new File("C:/ProgramData"));
} catch (IOException e) {
e.printStackTrace();
}
常に「/」の代わりに「\」を使用してください。そうしないと、エクスプローラーのみが開きます。詳しくは、これを読んでください- GUI Windowsエクスプローラー(Explorer exe)
Windows CLIの使用:
C:\Users\Md Arif Mustafa>Explorer.exe /select, "C:\Users\Md Arif Mustafa\Music\Aafreen-Himesh.mp3"
同じJavaソースコード:ここで変数filePathsはArrayList<String>
には、すべてのファイルパスのフォルダーが含まれます。
try {
Process proc = Runtime.getRuntime().exec("Explorer.exe /select, " + filePaths.get(i).replaceAll("/", "\\\\"));
proc.waitFor();
} catch (IOException | InterruptedException ex ) {
ex.printStackTrace();
}
それは私のために働いて、それがあなたを助けることを願っています!
上記の短いバージョンがあります。
String onlyPath = "D:\\GAME OF Thrones";
String completeCmd = "Explorer.exe /select," + onlyPath;
new ProcessBuilder(("Explorer.exe " + completeCmd).split(" ")).start();
これは、ファイル/フォルダー名に単語間に複数のスペースがある場合でも機能します。
//In this example there are 3 spaces between "GAME" and "OF" and 2 spaces between "OF" and "Thrones"
String onlyPath = "D:\\GAME OF Thrones";
String selectPath = "/select," + onlyPath;
//START: Strip one SPACE among consecutive spaces
LinkedList<String> list = new LinkedList<>();
StringBuilder sb = new StringBuilder();
boolean flag = true;
for (int i = 0; i < selectPath.length(); i++) {
if (i == 0) {
sb.append(selectPath.charAt(i));
continue;
}
if (selectPath.charAt(i) == ' ' && flag) {
list.add(sb.toString());
sb.setLength(0);
flag = false;
continue;
}
if (!flag && selectPath.charAt(i) != ' ') {
flag = true;
}
sb.append(selectPath.charAt(i));
}
list.add(sb.toString());
list.addFirst("Explorer.exe");
//END: Strip one SPACE among consecutive spaces
//Output List
for (String s : list) {
System.out.println("string:"+s);
}
/*output of above loop
string:Explorer.exe
string:/select,D:\GAME
string: OF
string: Thrones
*/
//Open in Explorer and Highlight
Process p = new ProcessBuilder(list).start();