zoukankan      html  css  js  c++  java
  • Java-Properties用法-入门

    对于应用程序的配置,通常的做法是将其保存在独立的配置文件中,程序启动时加载,修改时保存。Java中Properties类就提供了这样一种机制,配置项以Key-Value的数据结构存储在文本文件中,扩展名为".properties"。Properties的用法很简单,使用load(FileInputStream in)进行读取;使用getProperty(String key)来读取键值;使用put(String key, String value)添加键值对,使用store(FileOutputStream out)方法进行保存。

    有时,配置文件只存储了关键项目,其余参数并没有存储在文件中,调用时需要给一个默认值。对于这种情况,Properties提供了两种解决办法:

    (1)getProperty(String key, String defaultValue) 当指定key不存在时,返回默认值。

    (2)Properties(Properties defaultProperties) 使用默认Properties进行构造,则defaultProperties提供了所有的默认值。

    示例代码如下:

    PropertiesDemo.java

    package ConfigByPropertiesDemo;
    
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.IOException;
    import java.util.Properties;
    import javax.swing.*;
    
    /*
     * 功能:演示Properties的用法,实现JFrame窗体参数的设置和恢复
     * 版本:20150805
     * 结构:PropertiesDemo[主窗体],PreferencesDialog,PropertiesHelper
     */
    public class PropertiesDemo extends JFrame {
    
        private String configDir;//配置文件目录
        private File configPropertiesFile;//配置文件
        private Properties configProperties;//配置内容
    
        public PropertiesDemo() {
            // 加载配置
            loadSettings();
            // 设置窗体属性
            initFrame();
        }
    
        public void loadSettings() {
            /* 
             * 如果配置文件不存在,则加载默认配置
             */
            
            // 获取当前用户主目录
            String userDir = System.getProperty("user.home");
            //config路径如果不存在则新建
            configDir = userDir + "\config";
            File configDirFile = new File(configDir);
            if (!configDirFile.exists()) {
                configDirFile.mkdirs();
            }
    
            // 如果配置文件不存在,则配置内容由默认配置文件导入
            configPropertiesFile = new File(configDir + "\config.properties");
            if (configPropertiesFile.exists()) {
                configProperties = PropertiesHelper.loadProperties(configPropertiesFile);
            } else {
                try {
                    configPropertiesFile.createNewFile();
                    configProperties = loadDefaultConfig();//生成默认配置并装载
                    storeConfigProperties();//保存配置
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
        public void updateConfigProperties(String key, String value){
            /*
             * 功能:更新configProperties的内容
             */
            if(configProperties.containsKey(key)){
                configProperties.setProperty(key, value);
            }
            else {
                configProperties.put(key, value);
            }
        }
        
        public String getConfigPropertiesValue(String key){
            /*
             * 功能:根据key获取configProperties中对应的value
             */
            return configProperties.getProperty(key);
        }
        
        public void storeConfigProperties() {        
            //保存配置文件
            PropertiesHelper.storeProperties(configProperties, configPropertiesFile, "main properties");    
        }
    
        private Properties loadDefaultConfig() {
            /* 
             * 加载默认配置
             */
            Properties defaultConfig = new Properties();
                defaultConfig.put("left", "0");
                defaultConfig.put("top", "0");
                defaultConfig.put("width", "300");
                defaultConfig.put("height", "200");
            return defaultConfig;
        }
        
        public void restoreDefaultConfig() {
            /* 
             * 恢复默认配置
             */
            configProperties = loadDefaultConfig();
        }
        
        public void initFrame() {
            int left = Integer.parseInt(configProperties.getProperty("left"));
            int top = Integer.parseInt(configProperties.getProperty("top"));
            int width = Integer.parseInt(configProperties.getProperty("width"));
            int height = Integer.parseInt(configProperties.getProperty("height"));
            String title = configProperties.getProperty("title", "default title");//如果不存在则取默认值
    
            JMenuBar menubar = new JMenuBar();
            JMenu windowMenu = new JMenu("Window");
            windowMenu.setMnemonic('W');
            JMenuItem preferencesItem = new JMenuItem("Preferences");
            preferencesItem.setMnemonic('P');
            preferencesItem.addActionListener(new ActionListener() {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    PreferencesDialog optionsDialog = new PreferencesDialog(PropertiesDemo.this);
                    optionsDialog.setVisible(true);
                }
            });
            setJMenuBar(menubar);
            menubar.add(windowMenu);
            windowMenu.add(preferencesItem);
            
            setBounds(left, top, width, height);
            setTitle(title);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
    
        public String getConfigDir() {
            return configDir;
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            PropertiesDemo propertiesDemo = new PropertiesDemo();
            propertiesDemo.setVisible(true);
        }
    
    }

    PreferencesDialog.java

    package ConfigByPropertiesDemo;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    /*
     * @功能:修改配置对话框
     * @版本:20150805
     */
    class PreferencesDialog extends JDialog{
        
        PropertiesDemo propertiesDemo;//父窗体
        private JTextField xField;
        private JTextField yField;
        private JTextField widthField;
        private JTextField heightField;
        private JTextField titleField;
        private JButton saveButton ;//保存
        private JButton cancelButton ;//取消
        private JButton restoreDefaultsButton ;//恢复默认
    
        public PreferencesDialog(PropertiesDemo parent){
            super(parent, true);
            propertiesDemo = parent;
            
            //提取主配置信息,作为控件的默认值
            String  xPosition = propertiesDemo.getConfigPropertiesValue("left");
            String  yPosition = propertiesDemo.getConfigPropertiesValue("top");
            String width = propertiesDemo.getConfigPropertiesValue("width");
            String height = propertiesDemo.getConfigPropertiesValue("height");
            String title = propertiesDemo.getConfigPropertiesValue("title");        
            
            //本UI包含2个panel
            JPanel inputPanel = new JPanel();
            JPanel buttonPanel = new JPanel();
            
            //构造inputPanel    
            inputPanel.setLayout(new GridLayout());
            
            inputPanel.add(new JLabel("xPosition:"));
            xField = (JTextField) inputPanel.add(new JTextField(xPosition));
            inputPanel.add(inputPanel.add(new JLabel("yPosition:")));
            yField = (JTextField) inputPanel.add(new JTextField(yPosition));
            inputPanel.add(inputPanel.add(new JLabel("witdh:")));
            widthField = (JTextField) inputPanel.add(new JTextField(width));
            inputPanel.add(inputPanel.add(new JLabel("height:")));
            heightField = (JTextField) inputPanel.add(new JTextField(height));
            inputPanel.add(inputPanel.add(new JLabel("title:")));
            titleField = (JTextField) inputPanel.add(new JTextField(title));
            
            inputPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));
            
            //构造buttonPanel        
            saveButton = new JButton("save");
            saveButton.addActionListener(new ActionListener() {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    propertiesDemo.updateConfigProperties("left", xField.getText().trim());
                    propertiesDemo.updateConfigProperties("top", yField.getText().trim());
                    propertiesDemo.updateConfigProperties("width",widthField.getText().trim());
                    propertiesDemo.updateConfigProperties("height",heightField.getText().trim());
                    propertiesDemo.updateConfigProperties("title",titleField.getText().trim());
                
                    propertiesDemo.storeConfigProperties();//保存默认配置
                    JOptionPane.showMessageDialog(null, "保存成功");
                    setVisible(false);
                    //更新主窗体
                    propertiesDemo.initFrame();
                    propertiesDemo.validate();
                }
            });
            
            restoreDefaultsButton = new JButton("restore defaults");
            restoreDefaultsButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    propertiesDemo.restoreDefaultConfig();
                    propertiesDemo.storeConfigProperties();
                    
                    JOptionPane.showMessageDialog(null, "恢复成功");
                    setVisible(false);
                    
                    propertiesDemo.initFrame();
                    propertiesDemo.validate();
                }
            });
            
            cancelButton = new JButton("Cancel");
            cancelButton.addActionListener(new ActionListener() {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    setVisible(false);
                }
            });
            
            buttonPanel.add(restoreDefaultsButton);
            buttonPanel.add(saveButton);
            buttonPanel.add(cancelButton);
            buttonPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));
            
            //构造主框架
            getContentPane().setLayout(new BorderLayout());
            getContentPane().add(inputPanel, BorderLayout.CENTER);
            getContentPane().add(buttonPanel, BorderLayout.SOUTH);
            
            //设置窗体属性
            setTitle("更改主窗体配置");
            setLocationRelativeTo(inputPanel);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            pack();
        }
    }

    PropertiesHelper.java

    package ConfigByPropertiesDemo;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.Properties;
    
    /*
     * 功能:对Properties进行封装,简化加载或保存Properties的步骤
     * 版本:20150805
     */
    public class PropertiesHelper {
        
        /*
         * @功能根据文件名导入配置
         */
        public static Properties loadProperties(File file) {
            Properties properties = new Properties();
            try {
                FileInputStream in = new FileInputStream(file);
                properties.load(in);
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            return properties;
        }
    
        /*
         * @将配置及其备注导出到文件
         */
        public static void storeProperties(Properties properties, File file,
                String comments) {
            try {
                FileOutputStream out = new FileOutputStream(file);
                properties.store(out, comments);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    运行效果如下:

    初始界面,位置为(0,0)

     

    配置修改界面

     

    修改配置后,窗体参数发生变化

  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/pzy4447/p/4706226.html
Copyright © 2011-2022 走看看