有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:如何在Java中轻松更改配置文件值?

我有一个配置文件,名为config。txt,像这样

IP=192.168.1.145
PORT=10022
URL=http://www.stackoverflow.com

我想在Java中更改配置文件的一些值,比如将端口更改为10045。我怎样才能轻松实现目标

IP=192.168.1.145
PORT=10045
URL=http://www.stackoverflow.com

在我的试用版中,我需要编写大量代码来读取每一行,找到端口,删除原来的10022,然后重写10045。我的代码是假的,很难读。java有什么方便的方法吗

非常感谢


共 (3) 个答案

  1. # 1 楼答案

    如果你想要短的,你可以用这个

    public static void changeProperty(String filename, String key, String value) throws IOException {
       Properties prop =new Properties();
       prop.load(new FileInputStream(filename));
       prop.setProperty(key, value);
       prop.store(new FileOutputStream(filename),null);
    }
    

    不幸的是,它没有保留顺序、字段或任何注释

    如果你想保持秩序,一次读一行也没那么糟糕


    这个未经测试的代码将保留注释、空行和顺序。它不会处理多行值

    public static void changeProperty(String filename, String key, String value) throws IOException {
        final File tmpFile = new File(filename + ".tmp");
        final File file = new File(filename);
        PrintWriter pw = new PrintWriter(tmpFile);
        BufferedReader br = new BufferedReader(new FileReader(file));
        boolean found = false;
        final String toAdd = key + '=' + value;
        for (String line; (line = br.readLine()) != null; ) {
            if (line.startsWith(key + '=')) {
                line = toAdd;
                found = true;
            }
            pw.println(line);
        }
        if (!found)
            pw.println(toAdd);
        br.close();
        pw.close();
        tmpFile.renameTo(file);
    }
    
  2. # 2 楼答案

    使用Properties类加载/保存配置。然后简单地设置值并再次保存

    Properties p = new Properties();
    p.load(...);
    p.put("key", "value");
    p.save(...)
    

    这很简单直接

    另一方面,如果您的应用程序是一个不需要扩展以在多台计算机上运行的单个应用程序,那么不要费心使用数据库来保存配置。这完全是矫枉过正。然而,如果应用程序需要实时更改配置并需要扩展,Redis 可以很好地为您分发配置并处理同步。我已经成功地将其用于这一目的