Ответ 1
Использование: Runtime.getRuntime().exec("explorer.exe /select," + path);
Это также работает, если в PATH
есть пробел.
Теперь я использую java Desktop API для управления файловым проводником. Я знаю, как открыть файл-проводник, но я не знаю, как его открыть и выделить указанный файл.
Как мы используем Chrome, после загрузки файлов мы можем выбрать "показать в папке", чтобы открыть файл-проводник и выделить загруженный файл.
Как использовать java Desktop API для этого? Или есть ли какой-либо другой API в java, который может реализовать это действие?
Использование: Runtime.getRuntime().exec("explorer.exe /select," + path);
Это также работает, если в PATH
есть пробел.
API Desktop не поддерживает это. Вам нужно будет использовать ProcessBuilder
(или альтернативно Runtime.exec()
) для выполнения explorer.exe явно с параметрами, которые вы хотите. Это будет работать только в Windows, но если вы хотите запустить это на другой ОС, вам все равно придется использовать Desktop API.
Process p = new ProcessBuilder("explorer.exe", "/select,C:\\directory\\selectedFile").start();
EDIT:
Вы не можете выделить конкретный файл с помощью java Desktop API.
ОТВЕТ НА ОРИГИНАЛЬНЫЙ ВОПРОС:
API Desktop позволит вам сделать это, используя этот фрагмент,
File file = new File ("c:\<directory>");
Desktop desktop = Desktop.getDesktop();
desktop.open(file);
Документация для кода, использованного выше, находится по этим ссылкам, http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html и http://docs.oracle.com/javase/7/docs/api/java/io/File.html
На компьютере под управлением Windows это откроет проводник по умолчанию и в других системах он откроет своих исследователей по умолчанию соответственно.
В качестве альтернативы вы можете использовать новый API-интерфейс Java для создания требуемого пути, а затем вызвать метод, который возвращает соответствующий объект File.
Для краткости я исключил контрольный код, чтобы убедиться, что существуют объекты Desktop и File.
Мы можем открыть определенный путь из командной строки с помощью
start C:/ProgramData
В java можно использовать два способа открыть окно проводника Windows с определенным путем:
Использовать класс Process (как уже было сказано), но с помощью команды запуска
try {
Process builder = Runtime.getRuntime().exec("cmd /c start C:/ProgramData");
} catch (IOException e) {
e.printStackTrace();
}
Использование класса Desktop
try {
Desktop.getDesktop().open(new File("C:/ProgramData"));
} catch (IOException e) {
e.printStackTrace();
}
Это работает, даже если имя файла/папки имеет несколько пробелов между словами.
//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();
Ниже приведена более короткая версия выше.
String onlyPath = "D:\\GAME OF Thrones";
String completeCmd = "explorer.exe /select," + onlyPath;
new ProcessBuilder(("explorer.exe " + completeCmd).split(" ")).start();
Всегда используйте "\" вместо "/", иначе откроется только проводник, прежде чем читать это - Переключатели командной строки, которые вы можете используйте для открытия GUI Explorer (Explorer.exe)
Использование CLI для 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();
}
Это сработало для меня и надеюсь, что это поможет вам!