2016-02-16 12 views
1

假设我们有一个文本文件,像这样的:的Java读取数字

#this is a config file for John's server 


MAX_CLIENT=100 

    # changed by Mary 


TCP_PORT = 9000 

我写了下面的代码:

this.reader = new BufferedReader(new FileReader(filename)); 
    String line; 

    line = reader.readLine(); 
    while (line.length() != 0) { 

     line = line.trim(); 
     if (line.contains("#") || line.contains("")) { 
      line = reader.readLine(); 

     } else { 
      if (line.contains("MAX_CLIENT=")) { 
       line = line.replace("MAX_CLIENT=", ""); 
       this.clientmax = Integer.parseInt(line); 
      } 

      if (line.contains("TCP_PORT=")) { 

       line = line.replace("TCP_Port=", ""); 
       tcp_port = Integer.parseInt(line); 
      } 

     } 
    } 

其中clientmax和TCP_PORT都是int类型。

将clientmax和TCP_PORT接收值这个代码?

我应该怎么做,如果我的文本文件,改变一点点:

MAX_CLIENT=100# changed by Mary 

包含数后的注释。

流,顺便说一句#表示注释的开始。

谢谢。

回答

1

你应该使用专门用于此目的的一类:Properties

此类处理意见给你,让你不必担心。

你使用这样的:

Properties prop = new Properties(); 
prop.load(new FileInputStream(filename)); 

然后你就可以提取属性使用形成的:

tcpPort = Integer.parseInt(prop.getProperty("tcpPort")); 

或保存使用:

prop.setProperty("tcpPort", String.valueOf(tcpPort)); 
+0

我知道属性处理那些评论完整的行,但它处理尾随行注释? – Stormcloud

+0

我很好奇too..if你有格式的文本:MAX_CLIENT = 100#玛丽改变。属性类会只选择值100而没有选择它后面的值? –

+0

可悲的是,它不是100%适合这一目的,但在另一面,如果你有一个包含了''#字符,属性类甚至可以让你arbery Unicode字符和换行符存储在其属性字符串属性。对同一行的值作为值进行评论是不经常做的,因为它在解析时遇到了麻烦。 – Ferrybig

1

使用line.startsWith("#")而不是line.contains("#")

执行此操作时,请记住,你需要当你达到一个注释字符停止阅读。