如何在Java中弹出卷?

时间:2009-06-26 13:12:13

标签: java usb-drive

如何使用Java,跨平台“弹出”卷?

我有一个程序在可移动驱动器(USB存储卡读卡器)上执行某些操作,一旦完成,我希望程序弹出/卸载/删除(取决于我们正在谈论的口头语言)内存卡。

有可靠的跨平台方法吗?

2 个答案:

答案 0 :(得分:2)

可能不是你要找的答案,但是......

没有

据我所知,没有一种既定的单一平台方式。就此而言,我从来没有遇到过这样做的Java方式。 rather scary C# CodeProject允许弹出设备,但仅限于Windows。

variousdepressingly 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();

}

删除驱动器。上面的代码片段肯定不适合所有的应用程序,第二个代码并不是最好的,还有其他更好的方法来做它而不是产生匿名线程...但是你仍然得到它背后的想法:)

最后,我会在你的机器中执行任何第三方软件之前,先让你恰当地通知用户并询问他们的注意力......

我希望这有用: - )