2016-02-16 33 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("#")

執行此操作時,請記住,你需要當你達到一個註釋字符停止閱讀。