18 java IO

来源:互联网 发布:网络教育怎么样 编辑:程序博客网 时间:2024/06/07 13:45

18 java IO

18.2.1 InputStream类型

每一种数据源都有相应的InputStream子类。另外,FilterInputStream也属于一种InputStream,为“装饰器”(decorator)类提供基类,其中,装饰器类可以把属性或有用接口与输入流连接在一起。

18.2.2 OutputStream类型

FilterOutSteam为“装饰器”类提供一个基类。

18.4 Reader和Writer

有时候我们需要把来自于“字节”层次结构中的类和“字符”层次结构中的类结合起来使用。为了实现这个目的,需要用到适配器类:InputStreamReader可以把InputStream转换为Reader,OutputStreamWriter可以把OutputStream转换为Writer。

18.8 标准IO

18.8.1 从标准输入中读取

java提供了System.in,System.err,和System.out。

其中System.out已经被事先包装成了printStream对象。System.err同样是PrintStream,但System.in却是一个没有被加工包装的InputStream。这意味着我们可以立即使用System.out和System.err但是在读取System.in之前必须对其进行包装。

通常我们会用readLine()一次一行读取输入,为此,我们将System.in包装成BufferedReader来使用。这要求我们必须用InputStreamReader把Syste.in转换成Reader。

BufferedReader stdin = new BufferedReader(new InputStreamReader (System.in);String s;while(s=stdin.readLine()!=null && s.length!=0){    System.out.println(s);}

readLine()会抛出IOException。

18.8.2 将System.out转换成PrintWriter

System.out是一个PrintStream,而PrintStream是一个OutputStream。PirntWriter有一个可以接受OutputStream作为参数的构造器,因此,只要你需要,就可以把System.out转换成PrintWriter。

PrintWriter out = new PrintWriter(System.out,true);out.println("hello,world");

将第二个参数设成true,以便开启自动清空功能,否则,你可能看不到输出。

18.8.3 标准IO重定向

java的System类提供了一些简单的静态方法调用,以允许我们对标准输入,输出和错误IO流进行重定向。

setIn(InputStream)setOut(PrintStream)setErr(PrintStream)

18.10 新IO

旧IO类库中有三个类被修改了,用以产生FileChannel。这三个被修改的类是FileInputStream,FileOutputStream和RandomAccessFile。

18.14 Preferences

Preferences API与对象序列化相比,前者与对象持久性更密切,因为它可以自动存储和读取信息。不过,它只能用于小的,受限的数据集合–我们只能存储基本类型和字符串,并且每个字符串的存储长度不能超过8k。

public class PreferencesDemo{    Preferences prefs = Preferences.userNodeForPackage(PreferencesDemo.class);    prefs.put("Localtion","OZ");    prefs.putInt("Companions",4);    Prefs.putBoolean("Are there witches",true);    int usageCount = prefs.getInt("UsageCount",0);    usageCount++;    prefs.putInt("UsageCount",usageCount);    for(String key:prefs.get(key,null){        print(key + ":" + prefs.get(key,null);    }    print(prefs.getInt("Companions",0));}

当我们第一次运行程序时,UsageCount的值是0,但在随后引用中,它将会是非零值。

原创粉丝点击