2009-10-01 16 views
11

私は、ユーザーの "My Documents"フォルダにファイルを保存します。Javaの "My Documents"フォルダを見つける方法

私はこのような場所になってみました。すると

System.getenv("USERPROFILE") + "\\My Documents\\" 

を、私はこれは、言語は、例えばフランスの別の言語に設定されているシステムでは動作しません実現しました。

「マイドキュメント」フォルダを効率的に取得する別の方法はありますか?

答えて

14

あなたは明らかにこのトリックを使用することができますスイングに応じて、気にしない場合:

import javax.swing.JFileChooser; 
javax.swing.filechooser.FileSystemView; 

public class GetMyDocuments { 
    public static void main(String args[]) { 
    JFileChooser fr = new JFileChooser(); 
    FileSystemView fw = fr.getFileSystemView(); 
    System.out.println(fw.getDefaultDirectory()); 
    } 
} 

(ソース:http://www.rgagnon.com/javadetails/java-0572.html

+2

Mac OS Xの場合、これを使用した結果、1つのディレクトリが実際には高すぎます。 – Trejkaz

+0

これは存在しないフォルダを指します... c:\ Users \ \ Documents。私のシステム上のドキュメントフォルダはMy Documentsと呼ばれます。 – JavaLatte

+0

@JavaLatte実際の名前は本当ですか?エクスプローラは、ディレクトリが "Documents"という名前であっても、 "My Documents"として表示します。パスバーをクリックすると、実際のパスが表示されます。 –

0

は、Javaでの特別なフォルダ名にアクセスするためのwinfoldersjava JNI extensionがありますhttp://technet.microsoft.com/en-us/library/cc749369(WS.10).aspx

+0

Javaの場合は機能しません – abhilash

+1

"%CSIDL_PERSONAL%\ doc.txt"は、Javaの場合でもマイドキュメントフォルダのdoc.txtファイルを開きませんか? –

+0

おそらく、あなたのプログラムはもはやプラットフォームに依存しません。上記のようにSwing FileSystemViewのテクニックを使う方が良いでしょう。これはクロスプラットフォームで動作し、他のJavaアプリケーションと同じデフォルトに従うということです(常に一貫性があります)。 –

5

を見てみましょう。

winfoldersjavaページには、スイングを使用して別の方法を説明します

また、あなただけの「マイドキュメント」のパスを必要とし、あなたがWinFoldersJavaを必要としない場合があり感動スイングを気にしない場合。代わりに、javax.swing.filechooser.FileSystemView.getFileSystemView()。getDefaultDirectory()を使用できます。

0

そのディレクトリの場所は、各ユーザーが変更することができ、ロケールに依存するだけではありません。
そのフォルダの場所を調べるには、レジストリを調べる必要があります。 Windowsはそうするためのコマンドのいずれかです:

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User 
Shell Folders" /v personal 

または

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 
Folders" /v personal 

がないことを確認、実際にその場所が、それはそれらの一つです。パフォーマンスに関しては

+0

これらのレジストリエントリは、シェルAPIと呼ばれる他のプログラムのいずれかが作成されるまで作成されません –

9

これはJFileChooserを使用するよりも高速です:私のPCで

FileSystemView.getFileSystemView().getDefaultDirectory().getPath() 

は、JFileChooserアプローチは、300ミリ秒を必要とし、FileSystemView直接必要未満100ミリ秒を呼び出します。

関連する問題