2010-11-06 42 views
13

Vì lý do gì đó, đôi khi tôi cần tìm thư mục My Documents của người dùng hiện tại trên Windows trong một chương trình Java để đọc một số tệp. Nhưng theo như tôi có thể nói, không có cách nào để làm điều đó mà không phải là sai lầm nghiêm trọng.Phương pháp thích hợp để tìm thư mục My Documents của người dùng trên Windows bằng Java?

Cách sai đầu tiên: System.getProperty ("user.home");
Tại sao nó không hoạt động:

  • Nó chỉ trả về thư mục \ username \; Tôi cần thêm "\ Documents \" vào cuối để lấy thư mục Documents ... và nó chỉ hoạt động bằng tiếng Anh.
  • Sun bugs 6519127 và 4787931. Java tìm thư mục chính của người dùng trên Windows bằng cách đọc khóa đăng ký không dùng nữa * để tìm Máy tính để bàn, sau đó chọn bố mẹ; phương pháp này có nhiều vấn đề đã biết sẽ dễ dàng gây ra một thư mục hoàn toàn sai được trả về. Các lỗi là 3,75 năm và 8 tuổi mà không sửa chữa.

Cách thứ hai sai: Sử dụng chương trình đọc đăng ký để nhận thư mục Cá nhân của người dùng, là Tài liệu của tôi (nhưng i18n'd).
Tại sao nó sẽ không hoạt động:
Trong khi nó khắc phục sự cố chỉ có tiếng Anh, nó vẫn sử dụng cùng một khu vực đăng ký không được chấp nhận, vì vậy các lỗi vẫn áp dụng cho nó.

Khoá đăng ký không dùng nữa nói để sử dụng cuộc gọi gốc (SHGetKnownFolderPath) mà tôi rõ ràng không thể làm từ Java.

Cách sai thứ ba:

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

Tại sao nó sẽ không hoạt động: Nó hoạt động tuyệt vời!
Trừ khi không. Trong khi tôi đã có một chương trình sử dụng này mở và chạy trong nền, tôi đã mở một trò chơi DirectX (Fallout: New Vegas). Chương trình Java ngay lập tức chấm dứt không có dấu vết ngăn xếp. Luôn luôn tái sản xuất (đối với tôi trên trò chơi đó, và ai biết điều gì khác). Không tìm được lỗi Sun #.

Vì vậy, có phương pháp nào để tìm thư mục Tài liệu của người dùng, trên Windows, từ Java, không có sự cố đã biết không?

(Đây là một câu hỏi lớn thoải mái.)

* (Điều quan trọng là "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders")

+0

Tương tự như [làm thế nào để tìm thấy “My Documents” thư mục ] (http://stackoverflow.com/questions/1503555/how-to-find-my- tài liệu-thư mục). Nó đề cập đến winfoldersjava, một trình bao bọc JNI xung quanh SHGetSpecialFolderPath. Vì bạn đang sử dụng chức năng dành riêng cho Windows, JNI sẽ ổn. –

+1

Bạn có thực sự cô lập những sự cố này với đoạn mã từ cách thứ ba không? Bởi vì phương pháp này dường như được sử dụng bởi Swings sở hữu hộp thoại Open file (JFileCHooser) nên có vẻ như rất nhiều ứng dụng Java sẽ phải chịu đựng nó? –

+0

http://stackoverflow.com/questions/1503555/how-to-find-my-documents-folder –

Trả lời

0

Có một Java API tùy chỉnh mà một người nào đó xây dựng (trang web của họ không còn hoạt động), nhưng có đang vẫn còn trên Google Code:

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

có hai DLL rằng cần phải được tham chiếu, một cho mỗi kiến ​​trúc (x86 và x64).

-1

user.home không phải là "tài liệu của tôi", nhưng thư mục nhà của người dùng, như trên Unix ~ /. Để truy cập "Tài liệu của tôi", bạn có thể sử dụng System.getProperty ("user.home") + "\ Documents"; không phụ thuộc vào hệ thống ngôn ngữ. Thử nó.

+0

Anh ấy đã tuyên bố rằng anh ấy cần hỗ trợ đa ngôn ngữ - điều này sẽ không hoạt động. –

+0

Điều này cũng sẽ không hoạt động ngay cả khi không có vấn đề chỉ có tiếng Anh; như tôi đã chỉ ra trong câu hỏi của mình, Java sử dụng khóa đăng ký không dùng nữa để tìm user.home. Nó có thể thất bại trên Roaming Profiles, trên XP-> Vista nâng cấp, nếu người dùng đã đổi tên thư mục Desktop của họ, vv (sửa một phần có thể đã được gửi nhưng nó bị hỏng) –

+0

Xin đừng đăng câu trả lời gây ra nhiều vấn đề hơn hơn là họ giải quyết. –

4

Không có cách java thuần túy để làm điều đó, nhưng bạn có thể sử dụng trình bao bọc JNA trên JNI để làm điều đó mà không phải tự viết bất kỳ mã gốc nào.Có một ví dụ tốt về làm thế nào để có được thư mục Documents trên Windows nửa chừng câu trả lời tại:

What is the best way to find the users home directory in Java?

3

Một tốn thời gian, nhưng cách đáng tin cậy của việc tìm kiếm thư mục 'Tài liệu' của một người sử dụng cửa sổ: Hãy java của bạn ứng dụng thực thi tập lệnh dơi sử dụng Reg.exe (tệp hệ thống cửa sổ) để tìm giá trị của khóa reg có đường dẫn trong đó. Sau đó, sử dụng một đường ống trong cùng một tập tin dơi để gửi dữ liệu đó đến hàm 'findstr' mà cửa sổ nhắc lệnh có. Sử dụng một đường dẫn khác để xuất ra giá trị trả về cho một tệp văn bản. Sau đó, chỉ cần làm cho ứng dụng java của bạn đọc tập tin văn bản đó và xóa nó sau khi hoàn thành :) Làm việc đủ tốt cho tôi.

Mã cho file bat:

@ echo off 

Title Find Documents Folder 

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

exit 
Các vấn đề liên quan