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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-11-29 23:14  /  1024 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. import java.io.*;
  3. class SystemInfo
  4. {
  5.          public static void main(String[] args) throws IOException
  6.          {
  7.                          Properties prop=System.getProperties();
  8.                         
  9.                          prop.list(new PrintStream("sysinfo.txt"));
  10.          }
  11. }
复制代码
大家好  就是这个程序在打印系统信息的时候,这句话new PrintStream("sysinfo.txt"),为什么使用的new PrintStream
就可以显示出系统信息呢? 而用new PrintWriter("sysinfo.txt")就显示不出来呢?换句话说为什么不能用PrintWriter这个流呢?
这不也是操作文本的数据的嘛  很疑惑   哪位大神帮我解释下呀 谢谢 黑马币无限奉上啊

5 个回复

倒序浏览
获取系统级的信息,我个人觉得这个信息在获取的时候肯定不是纯文本,所以也不可以用字符流。  而且 System.out
这也是一个字节打印流。  不知是否正确。我查了下 list的源码
public void list(PrintStream out) {
        out.println("-- listing properties --");
        Hashtable h = new Hashtable();
        enumerate(h);
        for (Enumeration e = h.keys() ; e.hasMoreElements() ;) {
            String key = (String)e.nextElement();
            String val = (String)h.get(key);
            if (val.length() > 40) {
                val = val.substring(0, 37) + "...";
            }
            out.println(key + "=" + val);
        }
这里他会把获取到的信息存入到一个Hashtable中并把其中键值对强转成 字符串,可见最初获取到的信息应该不是纯文本

评分

参与人数 1黑马币 +10 收起 理由
我为你着迷 + 10 赞一个!

查看全部评分

回复 使用道具 举报
字节流(Stream)是不带缓冲的,调用print是直接写在文件中。
字符流(Writer)是带缓冲的,print是写到临时缓冲区里面。
prop.list( )中调用了println()-----》区别在这。
把它改为
prop.list(new PrintWriter(new FileWriter("sysinfo.txt"), true));

评分

参与人数 1黑马币 +10 收起 理由
我为你着迷 + 10 很给力!

查看全部评分

回复 使用道具 举报
kerner 发表于 2014-11-30 11:19
字节流(Stream)是不带缓冲的,调用print是直接写在文件中。
字符流(Writer)是带缓冲的,print是写到临时 ...

println这个方法 貌似 PrintStream 和  PrintWriter都有吧。。
回复 使用道具 举报
wf111sxwf 发表于 2014-11-30 11:27
println这个方法 貌似 PrintStream 和  PrintWriter都有吧。。

应该就是缓冲区的刷新问题,当是PrintWriter时,因为它用是匿名对象,所以流没有关,缓冲区也没刷新。如果把PrintWriter流关了,就能写到文件了
  1.                 Properties p = System.getProperties();
  2.                 PrintWriter pw = new PrintWriter("info.txt");
  3.                
  4.                 p.list(pw);
  5.                 pw.close();
  6. //这样就写出去了
复制代码

评分

参与人数 1黑马币 +10 收起 理由
我为你着迷 + 10 赞一个!

查看全部评分

回复 使用道具 举报
好厉害 果然是刷新问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马