A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔政 中级黑马   /  2012-10-30 18:43  /  3997 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我想知道Properties.store()方法的原理,是重写写全部内容,还是找到需要改的内容,然后单独修改
在毕老师的day20中,有一个练习是从配置文件“properties.txt”读取到集合中,好操作数据
在看视频之前,我自己做了一遍,我是用HashMap做的。
我的代码:
  1. public static void writeProperties()throws IOException{
  2. HashMap<String,String> hm=new HashMap<String,String>();
  3. //BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("properties.txt")));
  4. BufferedWriter bw=new BufferedWriter(new FileWriter("properties.txt"));
  5. hm.put("color", "black");
  6. hm.put("background", "black");
  7. hm.put("size", "111");
  8. Set<Map.Entry<String, String>> set=hm.entrySet();
  9. for(Map.Entry<String, String> me:set){
  10. bw.write(me.getKey()+"="+me.getValue());
  11. bw.newLine();
  12. bw.flush();

  13. }
  14. }
复制代码
上面的代码是将properties.txt删除,然后重新建一个,并添加所有数据

下面是毕老师的代码
  1. public static void loadDemo()throws IOException{
  2. Properties pro=new Properties();
  3. FileInputStream fis=new FileInputStream("properties.txt");
  4. pro.load(fis);
  5. pro.setProperty("size", "14");
  6. FileOutputStream fos=new FileOutputStream("properties.txt");
  7. pro.store(fos,"haha");

  8. }
复制代码
我就是知道store有没有重新建一个文件呢?有没有删除全部数据,然后添加全部数据?还是只修改了部分数据

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 bhxiaobo 于 2012-10-30 21:05 编辑

public FileOutputStream(String name)
                 throws FileNotFoundException创建一个向具有指定名称的文件中写入数据的输出文件流。创建一个新 FileDescriptor 对象来表示此文件连接。
首先,如果有安全管理器,则用 name 作为参数调用 checkWrite 方法。

如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它,则抛出 FileNotFoundException。


通过查看javaapi接口,可知道fos必须是已经存在的数据流,所以文件必须先存在。
public void store(OutputStream out,
                  String comments)
           throws IOException以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。使用 ISO 8859-1 字符编码写入该流。  

然后将此 Properties 表中的所有项写入 out,一次一行。对于每个项而言,先写入键字符串,然后是一个 ASCII =,最后是关联元素字符串。检查键和元素字符串的每个字符,确定是否应将其呈现为转义序列。ASCII 字符 \、制表符、换页符、换行符和回车分别作为 \\、\t、\f、\n 和 \r 写入。小于 \u0020 和大于 \u007E 的字符作为 \uxxxx 写入,其中 xxxx 是该字符相应的十六进制值。对于键,所有写入的空白字符前面都有一个 \ 字符。对于元素,所有写入的前导空白字符(但是不嵌入或尾随空白字符)前面都有一个 \ 字符。所有写入的键和元素字符 #、!、= 和 : 前面都有反斜杠,确保能正确地加载这些字符。

通过此项可知,它不是修改某一项,而是全部写入


评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马