zoukankan      html  css  js  c++  java
  • Java进阶03 IO基础(转载)

    IO示例

    下面是演示的文件file.txt

    Hello World!
    Hello Nerd!
    先来研究一个文件读取的例子:

    import java.io.*;
    public class Test{
    public static void main(String[] args){
    try{
    BufferedReader br =
    new BufferedReader(new FileReader("file.txt"));
    String line = br.readLine();
    while(line != null){
    System.out.println(line);
    line = br.readLine();
    }
    br.close();
    }catch(IOException e){
    System.out.println("IO Problem");
    }
    }
    }

    装饰器与功能组合

    程序IO的关键在于创建BufferedReader对象br:

        BufferedReader br = new BufferedReader(new FileReader("file.txt"));

    在创建的过程中,我们先建立了一个FileReader对象,这个对象的功能是从文件"file.txt"中读取字节(byte)流,并转换为文本流。在Java中,标准的文本编码方式为unicode。BufferedReader()接收该FileReader对象,并拓展FileReader的功能,新建出个BufferedReader对象。该对象除了有上述的文件读取和转换的功能外,还提供了缓存读取(buffered)的功能。最后,我们通过对br对象调用readLine()方法,可以逐行的读取文件。

    (缓存读取是在内存中开辟一片区域作为缓存,该区域存放FileReader读出的文本流。当该缓存的内容被读走后(比如readLine()命令),缓存会加载后续的文本流。)

    BufferedReader()是一个装饰器(decorator), 它接收一个原始的对象,并返回一个经过装饰的、功能更复杂的对象。修饰器的好处是,它可以用于修饰不同的对象。我们这里被修饰的是从文件中读取的文本流。 其他的文本流,比如标准输入,网络传输的流等等,都可以被BufferedReader()修饰,从而实现缓存读取。
     
    在Linux中,我们使用类似函数的方式来处理和传递文本流。在Java中,我们使用了装饰器。但它们的目的都类似,就是实现功能的模块化和自由组合。 

    更多的组合

    事实上,Java提供了丰富的装饰器。FileReader中合并了读取和转换两个步骤,并采用了常用的默认设置,比如编码采取unicode。我们可以使用FileInputStream + InputStreamReader的组合来替代FileReader,从而分离读取字节和转换两个步骤,并对两个过程有更好的控制。

    (当然,FileReader的使用更加方便。InputStreamReader是将FileInputStream转换成一个Reader,用于处理unicode文本)

    流的读写来自于四个基类: InputStream, OutputStream, Reader和Writer。InputStream和Reader是处理读取操作,OutputStream和Writer是处理写入操作。它们都位于java.io包中。

    Reader和Writer及其衍生类是处理unicode文本。如我们看到的Buffered Reader, InputStreamReader或者FileReader。

    InputStream 和OutputStream及其衍生类是处理字节(byte)流。计算机中的数据都可以认为是字节形式,所以InputStream和 OutputStream可用于处理更加广泛的数据。

    写入

    写入(write)操作与读取操作相似。我们可以通过使用装饰,实现复杂的写入功能。这里是一个简单的写入文本的例子:

    import java.io.*;
    public class Test{
    public static void main(String[] args){
    try{
    String content = "Thank you for your fish.";
    File file = new File("new.txt");
    if(!file.exists()){
    file.createNewFile();
    }
    FileWriter fw =
    new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(content);
    bw.close();
    }catch(IOException e){
    System.out.println("IO Problem");
    }
    }
    }

    上面创建了file对象,用于处理文件路径。
  • 相关阅读:
    5、python中的列表
    Linux---配置新服务器的常见操作(CentOS7)
    MapReduce原理篇
    用MR实现Join逻辑的两种方法
    Linux静态库与共享库
    mysql命令查看表结构及注释
    mysql 数据同步到 elastsearch7 数字类型精度丢失
    canal client-adapter 将mysql数据同步到 es elasticsearch 日期时间少8小时问题解决
    如何用redis做活跃用户统计-HyperLoglog
    jvm 虚拟机内存布局
  • 原文地址:https://www.cnblogs.com/airry66/p/3929810.html
Copyright © 2011-2022 走看看