如何在Eclipse RAP中通过SWT按钮调用Windows文件资源管理器
实现方案
分三种适用场景,按需选择即可:
场景1:桌面端RCP/本地运行的SWT应用,需要弹出用户本地Windows原生文件选择窗口
你只需要在按钮点击事件中,显式调用SWT原生的FileDialog(避开RAP重写的实现)即可,原生实现默认会调用对应操作系统的原生文件资源管理器窗口。
修改后的核心点击事件代码:
button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // 显式指定SWT原生FileDialog的全限定名,避开RAP自定义的实现 org.eclipse.swt.widgets.FileDialog nativeFileDialog = new org.eclipse.swt.widgets.FileDialog(getShell(), SWT.OPEN); // 可选配置文件过滤规则 nativeFileDialog.setFilterExtensions(new String[]{"*.docx", "*.pdf", "*.*"}); nativeFileDialog.setFilterNames(new String[]{"Word文档", "PDF文件", "所有文件"}); // 弹出窗口,获取选中的文件全路径 String selectedFilePath = nativeFileDialog.open(); if (selectedFilePath != null) { // 此处编写选中文件后的业务逻辑 System.out.println("选中文件路径:" + selectedFilePath); } } });
场景2:需要直接打开Windows资源管理器窗口(而非文件选择窗口)浏览指定路径
可以通过Java调用系统进程启动explorer.exe实现,代码如下:
button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { try { // 第二个参数为要打开的目录路径,示例为打开C盘根目录,留空则打开默认的「此电脑」 new ProcessBuilder("explorer.exe", "C:\\").start(); } catch (IOException ex) { ex.printStackTrace(); } } });
需要额外导入java.io.IOException包。
场景3:RAP Web应用场景,需要触发客户端用户的本地文件选择窗口
由于浏览器安全限制无法直接调用客户端本地exe,RAP提供了FileUpload组件来触发浏览器原生的文件选择器(对应各系统的原生资源管理器窗口),代码示例:
// 先导入RAP的FileUpload包:import org.eclipse.rap.rwt.widgets.FileUpload; FileUpload fileUpload = new FileUpload(container, SWT.NONE); fileUpload.setText("浏览本地文件"); fileUpload.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { String[] fileNames = fileUpload.getFileNames(); if (fileNames.length > 0) { System.out.println("选中文件:" + fileNames[0]); // 调用上传逻辑 fileUpload.submit("/upload"); } } });
内容的提问来源于stack exchange,提问作者Manjunath S
相关产品推荐
相关产品推荐

