2012-01-11 40 views
6

Tôi có một ứng dụng Java trên máy tính để bàn mà tôi đã viết. Trong khi thực hiện, tôi tạo các thư mục và tệp tại tên đường dẫn mặc định được xác định trong hệ thống.thư mục người dùng làm việc: XP vs Vista

Java.io.files nêu rõ: By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.

Bên cạnh đó, tôi đang sử dụng IzPack để cho phép cài đặt và các phím tắt sáng tạo.

Khi tôi đang chạy ứng dụng của mình trên máy tính XP, sau khi cài đặt, tôi nhận được lối tắt trên màn hình, và việc tạo tệp và thư mục được đề cập ở vị trí mà Izpack đã cài đặt Jar. đó là hành vi mong đợi.

Nhưng khi tôi thử nghiệm trên máy Vista, các thư mục và tệp được tạo trên màn hình nền! mặc dù Jar ở đúng vị trí (c: \ program files ..vv).

Tôi muốn các tệp đó được tạo tại cùng một thư mục mà Jar đang ở và hầu như không có ở màn hình.

Có ai có thể cho tôi biết bất kỳ thông tin chi tiết nào về những gì đang diễn ra ở đây không?

+2

Viết để c: \ Program files trong Vista cần sự đồng ý của UAC, vì vậy tôi nghi ngờ rằng System sử dụng desktop làm dự phòng. –

+0

Có cách nào bạn nghĩ rằng tôi có thể kiểm soát dự phòng? – uzil24

+0

Bạn vẫn có thể đặt cài đặt ứng dụng java mặc định bên trong% PROGRAMFILES% cho thư viện ứng dụng cốt lõi và như vậy. Tuy nhiên, thay vì lưu ** cấu hình người dùng/dữ liệu của bạn ** bất kỳ vị trí nào bên trong% PROGRAMFILES% trong bất kỳ hệ điều hành Windows nào, cách sử dụng 'System.getProperty (" user.home ")' hoặc 'System.getenv (" USERPROFILE ") 'với một thư mục đặc biệt bên trong cho ứng dụng java của bạn mà nó làm cho nó dễ dàng hơn cho người dùng/ứng dụng để thay đổi một cái gì đó? –

Trả lời

1

Đó là vì trong Vista/Seven, việc ghi vào thư mục Program Files cần phải có sự can thiệp của quản trị, vì vậy JVM tìm kiếm vị trí có thể ghi tiếp theo dưới dạng dự phòng: Desktop (hoặc thư mục User Documents). Bạn có thể dễ dàng xác định thư mục nhà người dùng một cách thống nhất trên tất cả các hệ điều hành, mặc dù, đó là cách tốt hơn so với chỉ để cho JVM chọn một - hy vọng - vị trí hợp lý.

Do đây là một known bug cho JVM trên Windows, nếu điều đó không giúp đỡ, dự phòng là để kiểm tra môi trường Hệ thống biến USERPROFILE mà phải trỏ vào đúng thư mục người sử dụng nhà:

String userHome = System.getenv("USERPROFILE"); 
+0

Tôi hiểu. Tôi đã không xem xét điều này. Một vấn đề có thể xảy ra khi sử dụng thư mục Home user là vấn đề Uninstall. Tôi không chắc làm thế nào tôi có thể làm cho những tập tin bị xóa trong trường hợp đó. Tôi biết rằng một số ứng dụng có xu hướng để lại các thư mục phía sau chúng. Tôi không bao giờ thích nó. – uzil24

+1

Bạn có thể dễ dàng kiểm tra xem thư mục đã chọn có ghi được hay không bằng cách cố gắng tạo một tệp tạm thời và kiểm tra xem thư mục mẹ của nó có phải là thư mục bạn mong đợi hay không và trong trường hợp không chọn được vị trí khác. –

+0

ok, tôi đã sửa đổi ứng dụng của mình để nó sử dụng "user.dir" thay vì đường dẫn tương đối và kết quả là một thảm họa. với lối tắt trên màn hình, các thư mục được tạo trên màn hình nền. với lối tắt menu "tất cả các chương trình", các thư mục được tạo tại vị trí c: \ doc và setting \ user. Và khi chạy jar trực tiếp từ vị trí c: \ program files \ app_name, nó chạy như nó cần. bằng cách sử dụng "user.home" có cùng một kết quả mỗi lần, mặt khác. làm thế nào tôi có thể làm cho ứng dụng chạy ở vị trí của bình? – uzil24

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