2012-06-21 28 views
5

Tôi đang xây dựng một ứng dụng Java trên máy tính để bàn và cần lưu trữ một số dữ liệu cục bộ (các sở thích và lịch sử). Đối với điều này, tôi muốn tạo thư mục mới ở vị trí thích hợp, như AppData \ myapp trong Windows và ~/.myapp trong Linux (và mọi nơi được mong đợi trên máy Mac).Tạo một thư mục lưu trữ cục bộ trong ứng dụng máy tính để bàn Java

Cách tốt đẹp, đa nền tảng để làm điều đó là gì?


Tôi đã nhìn thấy một số câu hỏi trên trang web này mà hỏi về điều này, nhưng một trong hai:

  • Người hỏi muốn tìm Windows Application Data (không cross-platform)
  • Giải pháp là tạo một thư mục trong user.home (kiểu Linux, không phải nền tảng chéo) Đây là những gì tôi hiện đang làm, nhưng tôi đang tìm kiếm một cải tiến.

Trả lời

0

Sử dụng thuộc tính hệ thống user.home. Như thế này:

String userHomePath = System.getProperty("user.home"); 
File myAwesomeFolder = new File(useHomePath, "myAweSomeApp"); 
myAwesomeFolder.mkdirs(); 
+0

Tôi đã thử nghiệm trên Windows 7 nơi nó trả về 'C: \ User \ John', trong khi tôi có thể muốn' C: \ Users \ John \ AppData \ Local' –

+0

@BartvanHeukelom, vâng, đó là vì nó trả về thư mục 'home' của bạn, không phải' AppData'. – npe

+0

'user.home' là một nơi được đảm bảo để ghi được, và là x-plat. Có lẽ bạn có thể sử dụng một biến môi trường nơi đã biết và 'user.home' nếu không. –

3

Bạn luôn có thể sử dụng Java Preferences API để lưu trữ thông tin cho mỗi người dùng và bạn không phải lo lắng về việc triển khai. Triển khai khác nhau có sẵn cho các nền tảng khác nhau nhưng điều đó bị ẩn khỏi bạn (ứng dụng khách).

Cách khác là sử dụng API Apache Commons Configuration, phức tạp hơn, nhưng cung cấp cho bạn nhiều tính năng hơn.

+0

Đó có thể là một nơi tốt cho sở thích như ông nói, nhưng dữ liệu lịch sử có lẽ không nên ở đó. – maba

+0

Thực tế nó dường như không hoàn toàn phù hợp, nhưng thú vị. Tôi không biết API này. –

+0

Tôi đoán câu hỏi xung quanh lịch sử có thể phụ thuộc vào cách * nhiều * lịch sử. Cả hai API sẽ có khả năng, nhưng có lẽ một số thử nghiệm tải là theo thứ tự –

-1

không được xác nhận về Linux nhưng bạn cũng có thể đăng nhập vào cửa sổ đăng ký.

một trong hai cách,

String path = System.getProperty("user.home")+ "\\AppLication Data"+"\\xyzFolder"; 

này làm việc cho cả hai cửa sổ 7 đến vì% AppData% cho biết con đường mà di sản cho ở trên.

+0

Đây là bất cứ điều gì nhưng đa nền tảng. –

1
import java.io.File; 

public class AppPathFolder { 

    public static void main(String[] args) { 
     String path = null; 
     String osName = System.getProperty("os.name").toLowerCase(); 
     if (osName.indexOf("windows")>-1) { 
      path = System.getenv("APPDATA"); 
     } else if (osName.indexOf("mac")>-1) { 
      // get the env. variable for Mac.. 
      path = System.getenv("?"); 
      // etc. for Linux, Unix, Solaris.. 
     } else { //anything else 
      path = System.getProperty("user.home"); 
     } 
     File rootOfPath = new File(path); 
     // create a sub-directory based on package name of main class.. 
     // perhaps prefixed with with java/appdata 
     System.out.println(rootOfPath); 
    } 
} 

Tất nhiên, có những lựa chọn khác cho một lượng nhỏ dữ liệu:

  • Apps. được tin cậy hoặc không có người quản lý bảo mật nào có thể sử dụng Preferences API
  • Ứng dụng dành cho máy tính để bàn. được khởi chạy bằng cách sử dụng Java Web Start có quyền truy cập vào API JNLP, cung cấp API PersistenceService - có sẵn ngay cả đối với các ứng dụng hộp cát.
  • Một ứng dụng có thể lưu trữ cookie.
Các vấn đề liên quan