0

Как открыть проводник Windows и выделить указанный файл с помощью Java?

10

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

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

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

5 ответ(ов)

0

Чтобы открыть проводник Windows и выделить файл по заданному пути, вы можете использовать следующий код на Java:

Runtime.getRuntime().exec("explorer.exe /select,\"" + path + "\"");

Этот способ также будет работать, если в path есть пробелы. Убедитесь, что путь к файлу правильно экранирован, если он содержит специальные символы или пробелы, чтобы избежать ошибок при выполнении команды.

0

EDIT:

С начала Java 9 в API Desktop появился метод для выбора файла:

desktop.browseFileDirectory(<file>)

EDIT:

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

ОТВЕТ НА ИСХОДНЫЙ ВОПРОС:

API Desktop позволяет вам сделать это с помощью следующего фрагмента кода:

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 Path в Java для построения необходимого пути, а затем вызвать метод, который вернет соответствующий объект File.

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

0

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

start C:/ProgramData

В Java есть два способа открыть проводник Windows с указанным путём:

  1. Использовать класс Process (как упоминалось в предыдущих ответах), но с командой start:

    try {
        Process builder = Runtime.getRuntime().exec("cmd /c start C:/ProgramData");
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  2. Использовать класс Desktop:

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

Оба способа позволят вам открыть указанный путь в проводнике Windows. Выберите тот, который больше подходит для вашего случая использования!

0

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

// В этом примере между "GAME" и "OF" три пробела, а между "OF" и "Thrones" два пробела
String onlyPath = "D:\\GAME   OF  Thrones";
String selectPath = "/select," + onlyPath;

// START: Удаляем лишние пробелы между последовательными пробелами
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: Удаляем лишние пробелы между последовательными пробелами

// Вывод списка
for (String s : list) {
    System.out.println("строка:" + s);
}
/* вывод вышеуказанного цикла

строка:explorer.exe
строка:/select,D:\GAME
строка:  OF
строка: Thrones

*/

// Открывает в Проводнике и выделяет
Process p = new ProcessBuilder(list).start();

Таким образом, этот код эффективно справляется с ситуациями, когда имя файла или папки содержит несколько пробелов подряд, разбивая их на отдельные части и корректно передавая их в команду для запуска Проводника Windows.

0

Вот более короткая версия вышеуказанного кода:

String onlyPath = "D:\\GAME   OF  Thrones";
new ProcessBuilder("explorer.exe", "/select," + onlyPath).start();

Обратите внимание, что я напрямую передаю аргументы в ProcessBuilder, что делает код более читаемым и избегает необходимости разбивать строку на части с помощью split().

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь