簡體   English   中英

使用Java在Windows上查找用戶的My Documents文件夾的正確方法?

[英]Proper method to find user's My Documents folder on Windows with Java?

無論出於何種原因,我有時需要在Java程序中在Windows上找到當前用戶的My Documents文件夾來讀取一些文件。 但據我所知,沒有辦法做到沒有嚴重缺陷。

第一個錯誤的方法:System.getProperty(“user.home”);
為什么它不起作用:

  • 它只返回\\ username \\文件夾; 我需要在末尾添加“\\ Documents \\”以獲取Documents文件夾......並且只能使用英語。
  • Sun錯誤6519127和4787931.Java在Windows上通過讀取已棄用的注冊表項*來查找用戶主文件夾以查找桌面然后獲取父項; 此方法有多個已知問題,很容易導致返回完全錯誤的文件夾。 這些錯誤是3.75歲和8歲,沒有修復。

第二種錯誤的方法:使用注冊表讀取程序獲取用戶的個人文件夾,這是我的文檔(但是i18n'd)。
為什么它不起作用:
雖然它修復了僅限英語的問題,但它仍然使用相同的棄用注冊表區域,因此錯誤仍然適用於它。

不推薦使用的注冊表項表示使用本機調用(SHGetKnownFolderPath),這顯然是我無法用Java完成的。

第三種錯誤方式:

JFileChooser fr = new JFileChooser();  
FileSystemView fw = fr.getFileSystemView();  
File documents = fw.getDefaultDirectory();

為什么它不起作用:它很棒!
除非它沒有。 雖然我有一個程序在后台使用這個開放和運行,我打開了一個DirectX游戲(輻射:新維加斯)。 Java程序立即終止 ,沒有堆棧跟蹤。 總是可以重現的(對我來說,那個游戲,誰知道還有什么)。 找不到太陽蟲#。

那么有什么方法可以在Windows上從Java中找到沒有已知問題的用戶的Documents文件夾?

(這是一個很好的大問題。)

*(關鍵是“HKCU \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Explorer \\ Shell Folders”)

沒有純粹的java方法可以做到這一點,但您可以使用JNA包裝器而不是JNI來完成它而無需自己編寫任何本機代碼。 有一個很好的例子,說明如何在Windows的中途獲取Documents文件夾:

在Java中查找用戶主目錄的最佳方法是什么?

查找Windows用戶的“Documents”文件夾的一種耗時但可靠的方法:讓您的Java應用程序執行使用Reg.exe(Windows系統文件)的bat腳本來查找具有該路徑的reg鍵的值在里面。 然后使用同一bat文件中的管道將該數據發送到windows命令提示符所具有的'findstr'函數。 使用另一個管道將返回的值輸出到文本文件。 然后,只需讓你的java應用程序讀取該文本文件,並在完成后刪除它:)對我來說工作得很好。

bat文件的代碼:

@ echo off

Title Find Documents Folder

Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" |findstr "Personal">>DocPath.dat

exit

有人建立了一個自定義Java API(他們的網站不再有效),但Google Code上仍然存在代碼:

http://winfoldersjava.googlecode.com/files/WinFoldersJava_1.1.zip

需要引用兩個DLL,每個體系結構一個(x86和x64)。

user.home不是“我的文檔”,而是用戶的主文件夾,就像在Unix上的〜/。 要訪問“我的文檔”,您可以使用System.getProperty(“user.home”)+“\\ Documents”; 不論語言系統如何。 試試吧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM