黑马程序员技术交流社区

标题: 问一个有关Properties和流的问题 [打印本页]

作者: 苍穹的雨    时间: 2014-4-15 16:08
标题: 问一个有关Properties和流的问题
本帖最后由 苍穹的雨 于 2014-4-16 17:49 编辑

import java.util.*;
import java.io.*;
class PropertiesDemo
{
public static void main(String[] args) throws IOException
{
  method_1();
  method_2();
}
//-----------------------------------------------------------
//写一个方法,可以在文件info.txt中读取键值信息,并存入Properties集合中
public static void method_1()throws IOException
{
  BufferedReader bufr=new BufferedReader(new FileReader("info.txt"));
  String str=null;
  Properties prop=new Properties();
  while ((str=bufr.readLine())!=null)
  {
   String[] arr=str.split("=");
   prop.setProperty(arr[0],arr[1]);
  }
  sop(prop);
}
//*************************************
public static void method_2()throws IOException
{
  FileReader fr=new FileReader("info.txt");
  Properties prop=new Properties();
  prop.load(fr);
  sop(prop);
}
//-----------------------------------------------------------
public static void sop(Object obj)
{
  System.out.println(obj);
}
}


而我在info.txt文件中写了这么几句话:
sf    sdf=sdfgdfg
asdasd=    sdasd
asqwe    =dafsafda
xcxvs=dfsaeda



于是结果中出现了:
{asqwe    =dafsafda, asdasd=    sdasd, sf    sdf=sdfgdfg, xcxvs=dfsaeda}
{asdasd=sdasd, sf=sdf=sdfgdfg, xcxvs=dfsaeda, asqwe=dafsafda}

结果中有空格的我能理解,请大神们讲讲为什么方法二没有空格,键值对是称对存在的,为什么会出现两个等号的情况?(异常未处理,未关流勿喷)谢谢~~~


作者: 向日葵的曙光    时间: 2014-4-15 16:25
你这明显缺少输出流,你这load写入只是写入到内存中,但是还没有写入到文件中。
所以必须定义一个目的源,向文件中输出
FileOutputStream fosFileOutputStream=new FileOutputStream("info.txt");
                prop.store(fosFileOutputStream, "注释");
作者: 苍穹的雨    时间: 2014-4-15 16:55
向日葵的曙光 发表于 2014-4-15 16:25
你这明显缺少输出流,你这load写入只是写入到内存中,但是还没有写入到文件中。
所以必须定义一个目的源, ...

只是练习而已,我不要写入文件,只在控制台上显示就可以了,我只是想明白为什么第二种方法写入内存后空格会消失,还有为什么会出现两个等号。
作者: 向日葵的曙光    时间: 2014-4-15 22:56
第一种方法是直接把文件中的键值对读取到流中,而读取到流中的格式是与文件格式一致的,所以控制台输出时会保留原格式输出
第二种方法是把流中的文件载入到集合中,prop.load(fr);这个方法是把流中的文件加载集合的方法。而存入集合时只读取键值对,其他的空格都会省略,所以输出的结果
就如你所看到的结果,解答完毕。
作者: 苍穹的雨    时间: 2014-4-16 09:49
向日葵的曙光 发表于 2014-4-15 22:56
第一种方法是直接把文件中的键值对读取到流中,而读取到流中的格式是与文件格式一致的,所以控制台输出时会 ...

至于“sf    sdf=sdfgdfg”在结果中变成“sf=sdf=sdfgdfg“,我昨天又做了把实验,把控制台的数据用输出流再写入文件中,于是在文件中得到了”sf=sdf\=sdfgdfg“,可见第二个等号加了反斜杠,于是我猜测prop.load方法会把一行中等号两边的空格忽略,在没有等号的情况下则会把空格同等与等号处理,空格两边的字符串也会被视为键值对~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2