2010-08-11 42 views
5

Chúng tôi có một nhóm kết nối tổng hợp (tệp jar) cho một trong các ứng dụng của chúng tôi. Hiện tại, chi tiết kết nối ứng dụng được đi kèm trong tệp jar (trong tệp .properties).Cách tệp jar có thể đọc một tệp thuộc tính bên ngoài

Chúng ta có thể làm cho nó phổ biến hơn không? Chúng ta có thể cho khách hàng biết chi tiết tập tin thuộc tính (cả đường dẫn và tên tệp) và sử dụng bình để lấy kết nối?

Liệu nó làm cho tinh thần để có cái gì như thế này trong mã khách hàng ..

XyzConnection con = connectionIF.getConnection(uname, pwd); 

cùng với điều này, khách hàng sẽ chỉ định (bằng cách nào đó ???) các thuộc tính tập tin chi tiết mà có - URL đến kết nối, thời gian chờ, vv

Trả lời

5

Chỉ cần tải các thuộc tính từ tập tin, một cái gì đó giống như

Properties properties = new Properties(); 
InputStreamReader in = null; 
try { 
    in = new InputStreamReader(new FileInputStream("propertiesfilepathandname"), "UTF-8"); 
    properties.load(in); 
} finally { 
    if (null != in) { 
     try { 
      in.close(); 
     } catch (IOException ex) {} 
    } 
} 

Lưu ý cách thức mã hóa được quy định một cách rõ ràng như UTF-8 ở trên. Nó cũng có thể được bỏ qua nếu bạn chấp nhận mã hóa ISO8859-1 mặc định, nhưng hãy cẩn thận với bất kỳ ký tự đặc biệt nào sau đó.

13

Cách đơn giản nhất, sử dụng công tắc -D để xác định thuộc tính hệ thống trên dòng lệnh java. Thuộc tính hệ thống đó có thể chứa đường dẫn đến tệp thuộc tính của bạn.

ví dụ

java -cp ... -Dmy.app.properties=/path/to/my.app.properties my.package.App 

Sau đó, trong mã của bạn, bạn có thể làm (xử lý ngoại lệ không được hiển thị cho ngắn gọn):

String propPath = System.getProperty("my.app.properties"); 

final Properties myProps; 

if (propPath != null) 
{ 
    final FileInputStream in = new FileInputStream(propPath); 

    try 
    { 
     myProps = Properties.load(in); 
    } 
    finally 
    { 
     in.close(); 
    } 
} 
else 
{ 
    // Do defaults initialization here or throw an exception telling 
    // that environment is not set 
    ... 
} 
0

đơn giản nhất cách là bên dưới. Nó sẽ tải application.properties từ thư mục cfg bên ngoài tệp jar.

cấu trúc thư mục

|-cfg<Folder>-->application.properties 
    |-somerunnable.jar 

Code:

Properties mainProperties = new Properties(); 
    mainProperties.load(new FileInputStream("./cfg/application.properties")); 
    System.out.println(mainProperties.getProperty("error.message")); 
-1
public static String getPropertiesValue(String propValue) { 
     Properties props = new Properties(); 
     fileType = PCLLoaderLQIOrder.class.getClassLoader().getResourceAsStream(propFileName); 
     if (fileType != null) { 
      try { 
       props.load(fileType); 
      } catch (IOException e) { 
       logger.error(e); 
      } 
     } else { 
      try { 
       throw new FileNotFoundException("Property file" + propFileName + " not found in the class path"); 
      } catch (FileNotFoundException e) { 
       logger.error(e); 
      } 
     } 
     String propertiesValue = props.getProperty(propValue); 
     return propertiesValue; 
    } 

trên phương pháp làm việc cho tôi, chỉ cần lưu trữ tập tin bất động sản của bạn vào thư mục từ đâu để chạy jar của bạn và cung cấp tên đó tại chỗ của propFileName, khi bạn muốn bất kỳ giá trị nào từ thuộc tính chỉ cần gọi getPropertyValue("name").

+1

Đó là không đọc được. –

1

Đây là giải pháp của tôi. Đầu tiên tìm kiếm app.properties trong thư mục startup, nếu không tồn tại cố gắng tải từ gói jar của bạn

File external = new File("app.properties"); if (external.exists()) properties.load(new FileInputStream(external)); else properties.load(Main.class.getClassLoader().getResourceAsStream("app.properties"));

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