0

伙计们感谢您的时间和帮助,我有一个用于创建和读取 Java 属性文件的 Java 表单。

例如,我可以编写文件config.properties,但是当我尝试读取时,我得到一个错误的字符串信息 usename=a path=/home/a/desktop

private void formWindowOpened(java.awt.event.WindowEvent evt) { 

try { 
     InputStream inStream = new FileInputStream("config.properties"); 
     Properties rbReg = new Properties(); 
     rbReg.load(inStream); 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); 
     Date date = new Date(); 

     text_box_smtp_server.setText(rbReg.getProperty("path")); 

     System.out.println(rbReg); 
} catch (Exception e) { 
     System.out.println("Error reading config file " + e); 
} 

我想用 path 的内容填充文本,例如:{username = a , path = /home / a / D esktop } 而不是 { username=a,path=/home/a/Desktop }。问题只是文本的形式,我输入。现在我要检查什么?还是改变?

4

1 回答 1

0

标准Properties类不支持您正在寻找的功能。类的public synchronized void load(InputStream inStream)方法Properties期望属性像 in KeyValue成对的。Key是一个没有任何空格或=或的单词:。现在,如果您想保留您的属性,如下所示:

 u s e r n a m e = a
 p a t h = /h o m e / a / D e s k t o p

并且您想为关键“路径”获取“/home/a/Desktop”,那么您需要以不同的方式处理它。一般的想法是让 InputStream 加载到Properties类的实例中,跳过其中的空格。你可以这样做:

 InputStream inputStream = new FileInputStream("config.properties");
 BufferedReader br = null;
 StringBuilder sb = new StringBuilder();
 String line;
 br = new BufferedReader(new InputStreamReader(inputStream));
 while ((line = br.readLine()) != null) {
     int length = line.length();
     for (int i = 0; i < length; i++) {
          if (line.charAt(i) != ' ') {
               sb.append(line.charAt(i));
           }
      }
      sb.append('\n');
 }
 InputStream inStream = new ByteArrayInputStream(sb.toString().getBytes());

您所需要的只是try用上面的代码替换块内的第一行。干杯!

于 2013-05-01T17:00:42.480 回答