我需要使用Java找到我的文档路径。以下代码不会给我“准确”的承诺
System.getProperty("user.home");
反过来应该是什么?
P.S: 我不想使用JFileChooser Dirty技巧。
答案 0 :(得分:28)
这很容易,JFileChooser
为你找到它
new JFileChooser().getFileSystemView().getDefaultDirectory().toString();
我希望这有助于某人
答案 1 :(得分:9)
您可以使用注册表查询来获取它,不需要JNA或管理员权限。
Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell
Folders\" /v personal");
显然除了Windows之外,其他任何操作都会失败,我不确定这是否适用于Windows XP。
编辑: 把它放在一个有效的代码序列中:
String myDocuments = null;
try {
Process p = Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v personal");
p.waitFor();
InputStream in = p.getInputStream();
byte[] b = new byte[in.available()];
in.read(b);
in.close();
myDocuments = new String(b);
myDocuments = myDocuments.split("\\s\\s+")[4];
} catch(Throwable t) {
t.printStackTrace();
}
System.out.println(myDocuments);
请注意,这将锁定进程,直到“reg query”完成,这可能会导致依赖于您正在执行的操作时出现问题。
答案 2 :(得分:2)
使用JNA你会这样做:
String myDocsPath = Shell32Util.getFolderPath(ShlObj.CSIDL_PERSONAL);
JNA即时提取DLL,然后使用JNI与此DLL进行Windows API调用。它隐藏了你的所有JNI细节。使用JNA就像使用任何其他Java库JAR一样简单。
答案 3 :(得分:1)
"user.home"
返回用户的主目录,而不是“我的文档”文件夹。
在Windows上,Vista或7为“C:\ Users \ Username”,XP为“C:\ Documents and Settings \ Username”
你想要的是:
System.out.println(System.getProperty("user.home") + File.separatorChar + "My Documents");
答案 4 :(得分:0)
这就是eclipse用来获取用户文档文件夹的方法
System.getProperty("user.dir") //$NON-NLS-1$
+ File.separator + "workspace")
希望它有用!
答案 5 :(得分:0)
我发现最好的方法是使用AWT:
ShellFolder.get("fileChooserDefaultFolder");
我已将我的Documents文件夹重定向到D:驱动器,并且它成功获取了该目录。它也可以在大约40毫秒(在我的机器上)上完成。使用FileSystemView
大约需要48毫秒,而new JFileChooser()
大约需要250毫秒。
这三种方法实际上都是在后台使用ShellFolder
,与FileSystemView
的区别可以忽略不计,但是直接调用它可以避免其他两种开销。
注意:,您也可以将其直接转换为File
,而不是隐式获取它的toString()
方法,这可以为您提供进一步的帮助:
File documents = (File) ShellFolder.get("fileChooserDefaultFolder");
答案 6 :(得分:-3)
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user") + (File.separatorChar + "My Documents")));
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("Selected file: " + selectedFile.getAbsolutePath());