Properties文件中的空格問題
默認情況下
空格可以作為Properties文件中Key和Value的分隔符,當我們需要在Key中使用空格的時候,可以使用反斜杠(\)對空格進行轉移。
注: 斜杠為(/),反斜杠為(\)。
讀properties文件時,值中有空格,可能會引起bug
一般properties文件都是配置文件,但是我們在讀取配置信息的時候,可能會有一些莫名其妙的錯誤。就比如:
我讀的配置很多事數字,不是long就是int,不全是字符串,那么問題來了。在把字符串轉換成int或者long的時候,就bug啦
1
2
3
4
5
6
|
Long keepAlive = null ; try { keepAlive = Long.parseLong(properties.getProperty(prefix + channelName + "." + Channel.KEEP_ALIVE_KEY)); } catch (Exception e) { System.out.println(e.getMessage()); } |
首先,你得機智的知道,這個方法 Long.parseLong(string) ,可以把字符串轉成long型,但是這個可能會拋異常,對,就算知道他可能拋異常,比如,傳的字符串的值是null,或者轉不成數字,那就異常啦。還是會出現一些問題。
但是在讀取配置的時候,發現如下debug圖
看到我讀取的值9,后面還帶了個空格,那么這樣子,肯定轉換成數據類型的時候就要拋異常咯。
先看下我讀取的配置文件具體是什么樣的
可以看到我的key也是有很多的空格的,前后都有。
然后再看看讀出來到debug是什么樣的
大致,總結一下,就是key的空格,他是不管的,但是對于value的空格,他就只留后面的一個空格。好像是這么滴吧
所以,在讀取到配置信息鍵值對,有必要對所有的鍵值對,統一處理一下。
1
2
3
4
5
6
7
8
|
/** * 讀取properties文件的值中會可能會有空格,需要處理一下。 */ private static void trimSpace(Properties prop) { for (Map.Entry<Object, Object> entry : prop.entrySet()) { entry.setValue(entry.getValue().toString().trim()); } } |
這么處理一下就可以啦,因為是地址傳遞的,你只要把你讀的prop當參數,走這方法一遭,就把空格處理啦。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/rightrat/article/details/5611837