如何使用Java,跨平台“弹出”卷?
我有一个程序在可移动驱动器(USB存储卡读卡器)上执行某些操作,一旦完成,我希望程序弹出/卸载/删除(取决于我们正在谈论的口头语言)内存卡。
有可靠的跨平台方法吗?
答案 0 :(得分:2)
可能不是你要找的答案,但是......
没有
据我所知,没有一种既定的单一平台方式。就此而言,我从来没有遇到过这样做的Java方式。 rather scary C# CodeProject允许弹出设备,但仅限于Windows。
various,depressingly poor,Java USB库甚至没有提示弹出设备。它们并不适用于所有平台,所以即使它们这样做也无法帮助你。
我的建议:为每个平台编写一些脚本或可执行文件,然后根据需要启动一个进程。
答案 1 :(得分:0)
迟到的反应,但我认为值得分享...... 由于默认的Java API没有附带此功能,您可以使用上面提到的外部库,但是我个人发现在jar的类路径中有一个第三方exe文件更方便(对于Windows) ,在temp文件夹中解压缩,在需要时执行,然后在应用程序完成后删除它。 作为第三方程序,我使用this这是一个只有CLI的程序,它可以对连接的设备做一些技巧,然后使用这个代码:
FileUtils.copyInputStreamToFile(MyClass.class.getClassLoader().getResourceAsStream(program),TEMP_EJECT_PROGRAM);
将其导出到临时文件位置(使用ApacheIO,你可以肯定没有它),以及这段代码:
private void safelyRemoveDrive(final String driveLetter) {
new Thread(new Runnable() {
public void run() {
if (TEMP_EJECT_PROGRAM.exists()) {
System.out.println("Removing " + driveLetter);
try {
Process p = Runtime.getRuntime()
.exec("\"" + TEMP_EJECT_PROGRAM.toString() + "\" " + driveLetter + " -L");
p.waitFor();
Scanner s = new Scanner(p.getInputStream());
while (s.hasNextLine())
System.out.println(s.nextLine());
s.close();
System.out.println("Removed " + driveLetter + ".");
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
删除驱动器。上面的代码片段肯定不适合所有的应用程序,第二个代码并不是最好的,还有其他更好的方法来做它而不是产生匿名线程...但是你仍然得到它背后的想法:)
最后,我会在你的机器中执行任何第三方软件之前,先让你恰当地通知用户并询问他们的注意力......
我希望这有用: - )