如何在java中只读取一个只有值的配置文件?

时间:2018-03-09 08:50:29

标签: java

我已经阅读了有关阅读a.config的相关帖子。策略是使用property和方法getproperty()。

但是,如果我只有价值观呢?我怎样才能提取所有价值? 例如:

server1 127.0.0.1 50000
server2 127.0.0.1 50001
server3 127.0.0.1 50002
server4 127.0.0.1 50003
server5 127.0.0.1 50004
server6 127.0.0.1 50005
server7 127.0.0.1 50006
server8 127.0.0.1 50007

我想将整个文件作为stringbuilder读取并解析它,但我不确定是否还有其他更好的方法来处理此配置文件。

3 个答案:

答案 0 :(得分:1)

您也可以使用org.apache.commons.io.FileUtils,

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;

public class SomeClass 
{

    public static void main(String argp[]) throws Exception
    {
        List<String> lines = FileUtils.readLines(new File("d:/temp/config.txt")) ;

        List<Config> configs= new ArrayList<Config>() ;
        for(String line:lines)
        {
            line = line.trim();

            if(line.equals(""))
                    continue ;

            Config config= new Config() ;
            String[] values= line.split(" ");
            config.server = values[0] ;
            config.ip = values[1] ;
            config.ip = values[2] ;         
            configs.add(config) ;
        }

        for(Config config:configs)
            System.out.println(config) ;
    }

    public static class Config
    {
        public String server = "" ;
        public String ip = "" ;
        public String port = "" ;

        @Override
        public String toString() 
        {
            return "config [server=" + server + ", ip=" + ip + ", port=" + port
                    + "]";
        }               
    }
}

答案 1 :(得分:0)

看来你的计划是读取这个文件并使用serverid ipaddress和port创建一个复杂的对象?

如果是这样,有数百个在线阅读文件的例子

    String fileName = "c://lines.txt";

    //read file into stream, try-with-resources
    String[] valueSplit;
    List<SomeObject> list = new ArrayList<>();
    try (Stream<String> stream = Files.lines(Paths.get(fileName))) {

        valueSplit = stream.split(" ");
        list.add(new SomeObject(valueSplit[0],valueSplit[1], valueSplit[2]);


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

答案 2 :(得分:0)

您可以使用.properties文件类型。 在此,您可以声明该字段,然后使用.getProperty()方法提取它们。

有了这个,你不必担心解析内容。

示例

config.properties

的文件内容
server1=127.0.0.1:50000
server2=127.0.0.1:50001
server3=127.0.0.1:50002
server4=127.0.0.1:50003
server5=127.0.0.1:50004
server6=127.0.0.1:50005
server7=127.0.0.1:50006
server8=127.0.0.1:50007
要检索的

java代码

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Test {

    public static void main(String[] args) {
        Properties config = new Properties();
        try {
            InputStream input = new FileInputStream(new File("path/to/file"));
            config.load(input);
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(config.getProperty("server1"));
        System.out.println(config.getProperty("server2"));
        System.out.println(config.getProperty("server3"));
        System.out.println(config.getProperty("server4"));
        System.out.println(config.getProperty("server5"));
        System.out.println(config.getProperty("server6"));
        System.out.println(config.getProperty("server7"));
        System.out.println(config.getProperty("server8"));

    }
}

<强>输出:

127.0.0.1:50000
127.0.0.1:50001
127.0.0.1:50002
127.0.0.1:50003
127.0.0.1:50004
127.0.0.1:50005
127.0.0.1:50006
127.0.0.1:50007