Как использовать Java-код для открытия проводника Windows и выделения указанного файла? - PullRequest
36 голосов
/ 09 сентября 2011

Я сейчас использую Java Desktop API для манипулирования файловым проводником.Я знаю, как открыть проводник, но не знаю, как его открыть и выделить указанный файл.

Поскольку мы используем Chrome, после загрузки файлов мы можем выбрать «показать в папке», чтобы открытьОбозреватель файлов и выделите загруженный файл.

Как использовать для этого Java API Desktop?Или есть другой API в Java, который может реализовать это действие?

Ответы [ 7 ]

39 голосов
/ 08 сентября 2014

Использование: Runtime.getRuntime().exec("explorer.exe /select," + path);

Это также работает, если в PATH есть пробел.

27 голосов
/ 27 декабря 2012

EDIT:

Начиная с java 9, теперь в Desktop API есть метод выбора файла

desktop.browseFileDirectory(<file>)

EDIT:

Вы не можете выделить конкретный файл с помощью API Java Desktop.

ОТВЕТ НА ОРИГИНАЛЬНЫЙ ВОПРОС:

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 откроется файловый менеджер по умолчанию, а в других системах - соответственно их обозреватели по умолчанию.

В качестве альтернативы вы можете использовать новый API Java Path для создания требуемого пути, а затем вызвать метод, который возвращает соответствующий объект File.

Для краткости я исключил проверочный код, чтобы убедиться, что объекты Desktop и File существуют.

27 голосов
/ 10 сентября 2011

Desktop API не поддерживает это. Вам придется использовать ProcessBuilder (или, альтернативно, Runtime.exec()), чтобы явно выполнить explorer.exe с нужными вам параметрами . Это будет работать только на Windows, однако, если вы хотите запустить это на другой ОС, вам все равно придется использовать Desktop API.

Process p = new ProcessBuilder("explorer.exe", "/select,C:\\directory\\selectedFile").start();
3 голосов
/ 12 сентября 2016

Мы можем открыть определенный путь из командной строки с помощью:

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();
    }
    
1 голос
/ 09 ноября 2017

Всегда используйте «\» вместо «/», иначе откроется только Проводник, прежде чем читать дальше - Ключи командной строки, которые вы можете использовать для открытия GUI Windows Explorer (Explorer.exe)

Использование интерфейса командной строки Windows:

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 голос
/ 04 мая 2017

Вот более короткая версия выше.

    String onlyPath = "D:\\GAME   OF  Thrones";
    String completeCmd = "explorer.exe /select," + onlyPath;
    new ProcessBuilder(("explorer.exe " + completeCmd).split(" ")).start();
1 голос
/ 24 апреля 2016

Это работает, даже если имя файла / папки содержит несколько пробелов между словами.

    //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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...