0

我在 gwt 上有一个带有 GUI 的应用程序。使用这个 gui 我想更改(这是子问题:更改 .properties 文件如何更好(我知道如何使用 .properties 从它们读取属性org.apache.commons.configuration,但不知道如何编辑(作为字符串或如何...))) .properties 文件。例如:我编写了以下 .properties 文件:

################################################################################
# User permissions                                                             #
################################################################################

users = admin, root, guest
users.admin.keywords = admin
users.admin.regexps = test-5, test-7

users.root.keywords = root
users.root.regexps = *

users.guest.keywords = guest
users.guest.regexps = *

那么,例如,如何keywords为管理员添加?

UPD: 这是我要更改配置文件的配置类:

    public class Config {

    private static final Config ourInstance = new Config();
    private static final CompositeConfiguration prop = new CompositeConfiguration();

    public static Config getInstance() {
        return ourInstance;
    }

    public Config(){
    }

    public synchronized void load() {
        try {
            prop.addConfiguration(new SystemConfiguration());

            System.out.println("Loading /rules.properties");
            final PropertiesConfiguration p = new PropertiesConfiguration();
            p.setPath("/home/mikhail/bzrrep/DLP/DLPServer/src/main/resources/rules.properties");
            p.load();
            prop.addConfiguration(p);

        } catch (ConfigurationException e) {
            e.printStackTrace();
        }

        final int processors = prop.getInt("server.processors", 1);

        // If you don't see this line - likely config name is wrong
        System.out.println("Using processors:" + processors);
    }

    public void setKeyword(String customerId, String keyword){
        prop.setProperty("users." + customerId + ".keywords", prop.getProperty("users." + customerId + ".keywords") + ", " + keyword);
        prop.
    }

    public void setRegexp(String customerId, String regexp)
    {}
}
4

3 回答 3

1

加载道具

void getPropertiesFromFile( Properties props, String fileName )
{
    try {
        File file = new File( fileName ) ;
        if (!file.exists())
            return ;

        FileInputStream in = new FileInputStream( file ) ;

        try {
            props.load( in ) ;
        } finally {
            in.close() ;
        }
    } catch (Exception e) {
    }
}

注意:也许,您不想从文件中加载它们,而是使用 classLoader.getResource(); 代码会略有变化。

然后,遍历名称并找到您需要的内容

for (String name : props.keys) {
   if (name.startWith("users.admin.")) {
       String value = props.get(name);
       ...
   }
}

如果要在迭代期间修改 props,则应按如下方式包装 props.keys

for (String name : new HashSet(props.keys)) {

完成后,将它们存储起来

    FileOutputStream fos = null;
    try {
        File file = new File("abc");
        fos = new FileOutputStream(file);
        props.store(fos, null);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
于 2013-04-09T13:39:13.847 回答
1

尝试关注

Properties prop = new Properties();

        try {
            //set the properties value
            prop.setProperty("users.guest.keywords", "keyword");
            prop.setProperty("users.guest.regexps", "regexps");    
            prop.store(new FileOutputStream("config.properties"), null);

        } catch (IOException ex) {
            ex.printStackTrace();
        }

希望能帮助到你

于 2013-04-09T13:19:47.150 回答
0

回答你原来的问题。

boolean String.startsWith(<prefix>) 
于 2013-04-09T13:21:08.127 回答