【问题标题】:How to find "My Documents" folder in Java如何在 Java 中找到“我的文档”文件夹
【发布时间】:2009-10-01 12:03:20
【问题描述】:

我愿意在用户的“我的文档”文件夹中保存一个文件。

我尝试这样获取位置:

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

然后,我意识到这在语言设置为另一种语言(例如法语)的系统中是行不通的。

还有其他有效获取“我的文档”文件夹的方法吗?

【问题讨论】:

    标签: java windows


    【解决方案1】:

    关于性能,这比使用JFileChooser 更快

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

    在我的电脑上,JFileChooser 方法需要 300ms,直接调用FileSystemView 需要不到 100ms。

    【讨论】:

      【解决方案2】:

      winfoldersjava JNI extension 用于访问 Java 中的特殊文件夹名称。

      winfoldersjava 页面还描述了另一种使用 Swing 的方法:

      另外,如果您只需要“我的文档”路径并且不介意触摸 Swing,则可能不需要 WinFoldersJava。您可以改用 javax.swing.filechooser.FileSystemView.getFileSystemView().getDefaultDirectory() 。

      【讨论】:

        【解决方案3】:

        如果你不介意依赖 Swing,你显然可以使用这个技巧:

        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

        【讨论】:

        • 对于Mac OS X,使用这个的结果实际上是一个目录太高了。
        • 这将我指向一个不存在的文件夹... c:\Users\\Documents。我系统上的文档文件夹称为我的文档。
        • @JavaLatte 你确定这是实际名称吗?即使目录名为“Documents”,资源管理器也会显示为“My Documents”,点击路径栏即可看到真实路径。
        • @SeanVanGorder,你是对的:如果我打开一个命令窗口并转到该目录,它被称为“文档”,但在资源管理器中它显示为“我的文档”。
        【解决方案4】:

        每个用户都可以更改该目录的位置,因此它不仅仅取决于语言环境。
        要查找该文件夹的位置,您必须查看注册表。 执行此操作的 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
        

        不确定实际上是哪个位置,但它是其中之一。

        【讨论】:

        • 这些注册表项是在其他称为 Shell API 的程序之一之前创建的
        • 另外,运行一个子进程只是为了获取一个注册表值是非常夸张的。那里有这么多的故障模式,如果例如,您将无法获得适当的错误处理。注册表项恰好不存在、无法访问,或者用户的公司安装了阻止 reg 运行的软件(正是我的工作场景)。
        【解决方案5】:

        【讨论】:

        • “%CSIDL_PERSONAL%\doc.txt”不会打开“我的文档”文件夹中的文件 doc.txt,即使是在 Java 中?
        • 可能会,但您的程序将不再独立于平台。使用上面建议的 Swing FileSystemView 技巧似乎更好,因为它可以跨平台工作,也意味着您遵循与其他 Java 应用程序相同的默认值(始终保持一致)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        • 2015-04-25
        • 2012-02-21
        • 2019-05-18
        • 1970-01-01
        相关资源
        最近更新 更多