web-dev-qa-db-ja.com

Javaコードを使用してWindowsファイルエクスプローラーを開き、指定したファイルを強調表示する方法は?

現在、JavaデスクトップAPIを使用して、エクスプローラーを操作しています。エクスプローラーを開く方法は知っていますが、指定したファイルを開いて強調表示する方法はわかりません。

Chromeを使用しているため、ファイルをダウンロードした後、「フォルダーに表示」を選択してエクスプローラーを開き、ダウンロードしたファイルを強調表示できます。

JavaデスクトップAPIを使用する方法?またはJavaはこのアクションを実現できますか?

37
Charles Wu

使用:Runtime.getRuntime().exec("Explorer.exe /select," + path);

これは、PATHにスペースがある場合にも機能します。

40
Stone

Desktop APIはこれをサポートしていません。 Explorer.exeを明示的に実行するには ProcessBuilder (または Runtime.exec() )を使用する必要があります 必要なオプション 。ただし、これはWindowsでのみ機能します。別のOSでこれを実行する場合は、とにかくDesktop APIを使用する必要があります。

Process p = new ProcessBuilder("Explorer.exe", "/select,C:\\directory\\selectedFile").start();
27
krock

編集:

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オブジェクトを返すメソッドを呼び出すこともできます。

簡潔にするために、デスクトップおよびファイルオブジェクトが存在することを確認するためのチェックコードを除外しました。

27
Zixradoom

コマンドラインから特定のパスを開くには:

start C:/ProgramData

Javaでは、特定のパスでWindowsエクスプローラーを開くことができます。

  1. プロセスクラス(既に回答済み)を使用しますが、開始コマンドを使用します

    try {
        Process builder = Runtime.getRuntime().exec("cmd /c start C:/ProgramData");
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  2. デスクトップクラスを使用する

    try {
        Desktop.getDesktop().open(new File("C:/ProgramData"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    
3
Iamat8

常に「/」の代わりに「\」を使用してください。そうしないと、エクスプローラーのみが開きます。詳しくは、これを読んでください- 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();
}

それは私のために働いて、それがあなたを助けることを願っています!

1
ArifMustafa

上記の短いバージョンがあります。

    String onlyPath = "D:\\GAME   OF  Thrones";
    String completeCmd = "Explorer.exe /select," + onlyPath;
    new ProcessBuilder(("Explorer.exe " + completeCmd).split(" ")).start();
1
Martin Koukal

これは、ファイル/フォルダー名に単語間に複数のスペースがある場合でも機能します。

    //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();
1
Aravind Sharma