Tôi đang sử dụng java.util.prefs.Preferences cho các tùy chọn ứng dụng. Và tôi cần có khả năng chỉnh sửa các tùy chọn đó theo cách thủ công. Có thể lưu nó vào tệp thay vì Windows Registry không? Hoặc tôi nên sử dụng một cơ chế khác thay vì java.util.prefs.Preferences?cách lưu trữ java.util.prefs.Preferences trong tệp?
Trả lời
Nếu bạn muốn tiếp tục sử dụng API Preferences, nhưng viết thư cho một tập tin, bạn sẽ cần một mới PreferencesFactory, như chi tiết trong this SO post.
Nó được giải thích trong bài khác, here
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close()
xin lỗi - Không giống nhau [so sánh API tùy chọn với các cơ chế khác] (http://docs.oracle.com/javase/1.5.0/docs/guide/preferences/index.html#prefs-other). Trong các cửa sổ ở đó là hai nơi mà các sở thích có thể được đặt .. Registry hoặc% APPDATA% Fe trong QSettings (Qt Framework) Tôi có thể lựa chọn giữa 2 tùy chọn này ... – denys
Xin lỗi, tôi đã hiểu lầm.Điều gì về điều đó? Tôi không thể kiểm tra nhưng có vẻ như wh bạn đang tìm kiếm. http://www.davidc.net/programming/java/java-preferences-using-file-backing-store –
Tốt hơn nhiều. Cảm ơn bạn, @MEK. – denys
Bạn sẽ muốn sử dụng hai phương pháp sau đây:
Preferences.exportSubtree(OutputStream os)
và
Preferences.importPreferences(InputStream is)
Tôi nghĩ rằng bạn có thể sử dụng các file tài sản thay thế. Chúng được lưu trữ trong hệ thống tập tin. Bạn có thể xác định đường dẫn bạn muốn. Và bạn có thể chỉnh sửa nó bằng tay. Xem this question để biết thêm chi tiết.
Mã này sẽ giúp bạn [http://java.sun.com/developer/technicalArticles/releases/preferences/]:
public class PrefSave {
private static final String PACKAGE = "/pl/test";
public static void main(String[] args) {
doThings(Preferences.systemRoot().node(PACKAGE));
doThings(Preferences.userRoot().node(PACKAGE));
}
public static void doThings(Preferences prefs) {
prefs.putBoolean("Key0", false);
prefs.put("Key1", "Value1");
prefs.putInt("Key2", 2);
Preferences grandparentPrefs = prefs.parent().parent();
grandparentPrefs.putDouble("ParentKey0", Math.E);
grandparentPrefs.putFloat("ParentKey1", (float) Math.PI);
grandparentPrefs.putLong("ParentKey2", Long.MAX_VALUE);
String fileNamePrefix = "System";
if (prefs.isUserNode()) {
fileNamePrefix = "User";
}
try {
OutputStream osTree = new BufferedOutputStream(
new FileOutputStream(fileNamePrefix + "Tree.xml"));
grandparentPrefs.exportSubtree(osTree);
osTree.close();
OutputStream osNode = new BufferedOutputStream(
new FileOutputStream(fileNamePrefix + "Node.xml"));
grandparentPrefs.exportNode(osNode);
osNode.close();
} catch (IOException ioEx) {
// ignore
} catch (BackingStoreException bsEx) {
// ignore too
}
}
Một khi trở lại tôi đã phải đưa ra một thực hiện các Lớp tùy chọn sẽ đọc cài đặt từ nhưng không ghi vào sổ đăng ký. Tôi bắt nguồn một lớp ReadOnlyPreferences từ AbstractPreferences để thực hiện điều này. Sau đó, tôi cần chính xác chức năng tương tự này mà bạn yêu cầu để đi đến/từ các tập tin. Tôi vừa mở rộng lớp ReadOnlyPreferences của mình để ghi đè lên sync() và flush() để giữ cho tệp được đồng bộ. Phần thú vị về điều này nó sẽ sử dụng cùng một logic chính xác để áp dụng mặc định cho các giá trị giống như việc sử dụng thông thường của các prefs vì không có gì thực sự tồn tại trong sổ đăng ký để đọc. Tôi giữ các tập tin trong đồng bộ bằng cách sử dụng exportSubtree() và importPreferences() từ lớp cơ sở để làm tất cả các nâng nặng cho tôi.
Tôi rất tiếc tôi không thể đăng mã vì tôi không sở hữu mã nhưng tôi đã sử dụng công cụ ưu tiên được mã hóa mà bạn có thể tìm thấy tại liên kết sau làm điểm bắt đầu. Đó là những gì tôi đã làm và nó đã cho tôi khoảng một giờ để chưng cất nó xuống chỉ là những gì tôi cần mà chủ yếu là ném mã đi đó là dễ dàng hơn nhiều so với viết mã! Nó cũng được xuất bản trong Dr Dobbs tại liên kết sau nếu bạn không muốn bấm vào cái đầu tiên. Tôi chưa bao giờ thấy một nơi dễ dàng trên bài viết dobbs để tải xuống toàn bộ nguồn. Bất kể, bài viết là tốt nhất tôi đã nhìn thấy để mở rộng các công cụ ưu đãi.
http://www.panix.com/~mito/articles/#ep
http://www.drdobbs.com/security/encrypted-preferences-in-java/184416587?pgno=4
Thử lớp sau đó cho phép bạn sử dụng một số đơn giản put()
và get()
chức năng sử dụng một configuration.xml
tệp cục bộ.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
public class SimpleProperties
{
private String propertiesFilePath;
private Properties properties;
public SimpleProperties() throws InvalidPropertiesFormatException, IOException
{
propertiesFilePath = "configuration.xml";
properties = new Properties();
try
{
properties.loadFromXML(new FileInputStream(propertiesFilePath));
} catch (InvalidPropertiesFormatException e)
{
}
}
public void put(String key, String value) throws FileNotFoundException, IOException
{
properties.setProperty(key, value);
store();
}
public String get(String key)
{
return properties.getProperty(key);
}
private void store() throws FileNotFoundException, IOException
{
String commentText = "Program parameters";
properties.storeToXML(new FileOutputStream(propertiesFilePath), commentText);
}
}
- 1. SIGABRT cách tải tệp tin lưu trữ?
- 2. Lưu trữ tệp Heroku
- 3. BLOB trong SQL lưu trữ tệp Video
- 4. Vùng lưu trữ git lưu trữ tệp như thế nào?
- 5. Cách lưu trữ Nhật ký trong tệp txt bằng android.util.log
- 6. Cách tạo tệp lưu trữ tar.gz trong cửa sổ?
- 7. cách xóa tệp trong kho lưu trữ từ xa?
- 8. Lưu trữ tệp nhật ký lưu trữ ở đâu?
- 9. Xóa tệp hoặc lưu trữ tệp?
- 10. Thực hành tốt việc lưu trữ Tệp đã tải lên trong DB hoặc lưu trữ nó trong Hệ thống tệp
- 11. Subversion lưu trữ các tệp trong kho lưu trữ như thế nào?
- 12. Lưu trữ một tệp trong khay nhớ tạm trong python
- 13. ASP.NET - Lưu trữ các tệp tạm thời
- 14. Lưu trữ thứ nguyên trong tệp xml trong Android
- 15. Lưu trữ vào tệp bằng JavaScript/GreaseMonkey
- 16. Lưu trữ tệp âm thanh trong lưu trữ cục bộ html5- tải xuống tệp âm thanh với javascript
- 17. Android: Cách lưu trữ cookie?
- 18. Cách chia sẻ tệp trên các kho lưu trữ git?
- 19. Lưu trữ tệp trên đĩa hoặc MongoDB
- 20. Cách lưu trữ TypeInfo
- 21. Git lưu trữ tệp như thế nào?
- 22. Vấn đề lưu trữ dữ liệu iOS5. Nơi lưu tệp?
- 23. Lưu trữ XCode không tạo tệp DSYM
- 24. phương pháp lưu trữ các tệp nhị phân trong SVN
- 25. Lưu trữ an toàn tệp p12 trong đường ray
- 26. thực hành tốt nhất: cách lưu trữ mã phía máy chủ trong kho lưu trữ maven
- 27. Git lưu trữ tệp ở đâu?
- 28. Lưu trữ nội dung web trong một tệp JAR
- 29. Lưu trữ bản đồ trong các tệp thuộc tính
- 30. Eclipse: Lưu trữ thông tin trong tệp .project
[java.util.Properties] (http://download.oracle.com/javase/tutorial/essential/environment/properties.html) có thể? Nó ít mịn hơn so với sở thích mặc dù. – BalusC
Tôi đoán bạn chưa sử dụng [Javadoc] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/prefs/Preferences.html). Làm điều đó và xem bạn có còn gì để hỏi không. –
@MarkoTopolnik bạn có nghĩa là "Dữ liệu này được lưu trữ liên tục trong cửa hàng sao lưu phụ thuộc vào triển khai.Triển khai điển hình bao gồm các tệp phẳng, sổ đăng ký dành riêng cho hệ điều hành, máy chủ thư mục và cơ sở dữ liệu SQL. ** Người dùng của lớp này không cần phải quan tâm đến chi tiết của cửa hàng sao lưu. ** "??? – denys