我正在尝试制作一个程序来下载一些文件,现在我想打开这些文件所在的文件夹(在windows资源管理器上)(它始终是同一个文件夹),并选择下载的最后一个文件,我找到了在java上这样做的代码:
private void openFile(File f) {
try {
Runtime.getRuntime().exec("explorer.exe /select," + f.getAbsolutePath());
} catch (Exception ex) {
System.out.println("Error - " + ex);
}
}
它可以工作,但每次我按下按钮打开文件夹时,它都会打开一个新的资源管理器窗口,其中包含选定的文件,因此我最终打开了许多资源管理器的窗口。是否有方法对已打开的文件夹执行此操作?
我一直在网上寻找这个,但我只找到了我已经使用的相同代码。关于这个问题的所有其他帖子都是多年前的,所以我不知道以前的版本是否也这样。
如果你们能帮助我的话,我非常感谢。
4条答案
按热度按时间insrf1ej1#
wko9yo5t2#
嗨,谢谢你帮助我。
你的意思是像这样使用开始?我只是尝试了这种方法,每次都会打开一个新的资源管理器窗口。
dly7yett3#
*$start C:\Users\user\Desktop*
没有可用于此操作的选择开关,因此仅适用于目录。
我试了一些东西。考虑一个文件abc。cpp需要在现有资源管理器窗口中具有焦点。
使用Java桌面API:
O/P-java.lang.UnsupportedOperationException:当前平台不支持BROWSE_FILE_DIR操作
win 10:https://bugs.openjdk.java.net/browse/JDK-8233994似乎有一个未解决的错误
方法#2:存储资源管理器的processid,并尝试在调用新窗口之前使用相同的对象销毁上一个窗口。
//当不是第一种情况时,使用标志变量执行以下行
这不起作用。进程作为外部线程运行,当前线程不是所有者。
另一种解决方法,但根本不是理想/合适的解决方案。它将重置任务栏和其他子进程。资源管理器由userinit进程创建,许多进程都是它的子进程。所以在周围玩耍可能不是个好主意。
$taskkill/IM浏览器。exe/F和资源管理器。exe/选择“C:\Users\user\Documents\abc.cpp”&explorer.exe
最后一个命令被附加以重新启动并再次看到任务栏和托盘图标。我不建议这样做。“解决方案不能比问题本身更糟糕。”
像JFileChooser这样的API模态对话框可以与setSelectedFile()一起使用。这样,一次只能激活一个子对话框,并且只有在对话框窗口关闭后才能再次与父帧进行交互。这种行为可能不符合您的要求。
mbzjlibv4#
非常感谢,我尝试的第一件事是browseFileDirectory方法,但无法使其工作,我希望有一天他们会修复该方法。我想伊玛试试这个。
*$start C:\Users\user\Desktop*
按创建文件排序文件更容易,只需按“主页”键即可选择最后一个文件。如果没有,我将尝试filechooser,看看您是否可以使用它移动或重命名文件。
非常感谢。
编辑:实际上,我在想,程序是否可能“按下”键,如果是,它可以按文件名的字母,并最终选择实际文件。
但我不知道是否有一种方法可以将键发送到java上的浏览器窗口,我会做一些研究。