2016-04-10 12 views
2

私は[今] USBドライブをイジェクトするために私のJavaプログラムを書くための方法があるならば、私はいくつかの検索を行なったし、次の質問見つかった不思議:、応答なしで、それが6年前に頼まれたHow Do I Eject a Volume in Java?JavaでUSBドライブを取り出すプログラムの書き方は?

をそれを今できる方法はありますか?

Windowsでのみ行う必要があります.Macで動作するものがあればプラスになります。

+2

はなかった願っていますとしょうかん。プラットフォーム固有のハックに頼る必要があるかもしれません。特定のオペレーティングシステムを念頭に置いていましたか? – Joni

+0

標準ランタイムライブラリにルーチンはありません。そのためには、基礎となるオペレーティングシステムに依頼する必要があります。 –

+0

ここにはWindowsコマンドラインアプリケーションがいくつかありますが、Process.executeを使用してアプリケーションを呼び出します。 http://stackoverflow.com/questions/206248/how-do-you-programmatically-eject-an-usb-mass-storage-device – Whome

答えて

0

litle後半応答コマンドが、私はあなたが使用することができ、デフォルトのJava APIがそれにこの機能が付属していないので、それは ...共有する価値があったと思いましたしかし、上記のような外部ライブラリは、私は個人的には、はるかに便利(窓のための)は、瓶のクラスパスに第三者のexeファイルを持っていることがわかった一時フォルダで抽出し、必要なときに実行し、それと。 は、サードパーティ製のプログラムとして、私は、接続されたデバイスでいくつかのトリックを行うことができますCLI唯一のプログラムであるthisを使用して、このコードを使用:

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

} 

ドライブを取り外すことができます。上記のコードはすべてのアプリケーションには必ずしも適していませんし、perticularの2番目のスレッドは最大ではありません。匿名スレッドを生成するよりももっと優れた方法があります。

最後には、私はあなたが適切にユーザーに通知し、自分のマシンで任意のサードパーティ製のソフトウェアを実行する前に、そのコンセントを求めるsugest ...

私はこれが標準と便利:-)

関連する問題