2010-12-06 22 views
10

私は基本的なファイルブラウザを作っており、デフォルトのルートディレクトリを取得する方法を知りたいと思っています。私はjava.io.File.listRoots()がすべてのルーツを与えてくれることを知っています(私にとってはA:\, C:\, D:\, E:\, F:\, G:\, H:\, I:\, L:\ T:\, U:\, X:\, Y:\, Z:\です)。しかし、私はブラウジングをどこから始めるべきかを知っているので、ユーザーが主に使用しているもの(オペレーティングシステムを持っているもの)これは、任意のヘルプのですが、あなたが試みることができる場合Javaでデフォルトのルートディレクトリを取得する

答えて

2

Windows上の唯一のものです。

したがって、次のコードは、唯一Windowsの作品:

System.getenv("SystemDrive"); 

それはSystemDrive環境変数の値を取得します。これは常にオペレーティングシステムのルートパーティションを返します。 C:

15

わからない:

import javax.swing.filechooser.*; 

FileSystemView.getFileSystemView().getRoots()[0]; 

または

FileSystemView.getFileSystemView().getHomeDirectory(); 

または最後のスニペットの場合

System.getProperty("user.dir"); 

を、あなたが得ることができますgetParent()を使用して上にナビゲートし、nullが返されるようにします。 Unixに、それは常に/なので、オペレーティング・システムのルートパーティションを取得

+0

リンクが壊れています – IanGilham

+0

@IanGilham他の回答にコメントするつもりだったと思います – Supuhstar

+1

はい、悪いです。あなたは私が意味するものを見つけたようです。 – IanGilham

0
public static String rootDirectory(){ 
     return File.listRoots()[0].getAbsolutePath(); 
} 
+7

これは、フロッピードライブが接続されていると、Windowsの 'A'ドライブではないことが保証されていますか? – Supuhstar

+1

@ Suuphstar、私はちょうどテストを実行しました。答えはノーです。 Windowsでは、ルーツのリストをアルファベット順に返しますので、「A:\」が最初です。 さらに、docs(https://docs.oracle.com/javase/7/docs/api/java/io/File.html#listRoots())によると、「特定のJavaプラットフォームはゼロ以上をサポートしている可能性があります階層的に構成されたファイルシステムです。つまり、インデックス0を盲目的に参照解除すると、ArrayIndexOutOfBoundsExceptionが発生する可能性があります。 この回答は完全にクロスプラットフォームではなく、信頼性がありません。 –

関連する問題