JDK笔记-IO流读写

定义
什么是“流”,就像水,你取一杯也可以用,取一桶也可以用。非流的数据传输,比如你下载一张图片,需要整幅图片下载完之后才能使用,所以说,流是一种数据传输的模式。

输入流和输出流,差别在于出和入。如果数据的流向是程序至设备,我们称为输出流,反之我们称为输入流。服务器端的输出流对应就是接受客户端的输入流。

IO整体结构图
这里写图片描述


IO流结构图
这里写图片描述


InputStream类与OutputStream类
Java把InputStream抽象类的子类创建的流对象称作字节输入流,OutputStream抽象类的子类创建的流对象称作字节输出流。

IntputStream的read()方法以字节为单位顺序地读取源中的数据,只要不关闭流,每次调用read方法就顺序的读取源中的其余内容,直到源的末尾或输入流被关闭。

OutStream流以字节为单位顺序的写文件,只要不关闭文件流,每次调用write方法就会顺序地向目的地写入内容,知道流被关闭。

public static void main(String[] args) throws Exception {
    //在目录下新建hello.txt
    FileOutputStream out = new FileOutputStream("hello.txt");
    // 把字符串转化为字节数组并写入到流中
    out.write("http://blog.csdn.net/peng_hong_fu/article/details/52605935".getBytes()); 
    out.close();

    File f = new File("hello.txt");
    FileInputStream in = new FileInputStream(f);
    byte[] buf = new byte[1024];
    int len = in.read(buf); // 读取内容到字节数组buf中
    System.out.println("len:"+len);
    // String构造函数把字节数组转化为字符串
    System.out.println(new String(buf, 0, len)); 
    in.close();
}

Reader类与Writer类
Java把Reader抽象类的子类创建的流对象称作字符输入流,Writer抽象类的子类创建的流对象称作字符输出流。

Reader类提供的read方法以字符为单位顺序地读取源中的数据,只要不关闭流,每次调用read方法就书怒的读取源中的其余内容,直到源的末尾或输入流被关闭。

OutStream流溢字符为单位顺序的写文件,只要不关闭流,每次调用write方法就顺序地向目的地写入内容,直到流被关闭。

public static void main(String[] args) {
    try {
        //Read输入
        String content = "轻轻的我走了,正如我轻轻的来...000";
        File f = new File("ourang.txt");
        char[] a = content.toCharArray();
        FileWriter out = new FileWriter(f);
        out.write(a, 0, a.length);
        out.close();

        FileReader in = new FileReader(f);
        StringBuffer buffer = new StringBuffer();
        char[] tom = new char[10];
        int n = -1;
        while ((n = in.read(tom, 0, 10)) != -1) {
            String temp = new String(tom, 0, n);
            buffer.append(temp);
        }
        in.close();
        System.out.println(new String("内容:" + buffer));

        //Writer输出
        FileWriter out = new FileWriter("hello2.txt");
        out.write("hahaha"); // 可以直接写入字符串,不用转化为字节数组
        out.close();

        char[] buf = new char[1024]; // 字符数组
        FileReader in = new FileReader("hello2.txt");
        int len = in.read(buf); 
        System.out.println("len:" + len);
        // String构造函数把字符数组转化为字符串。
        System.out.println(new String(buf, 0, 1024)); 
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Scanner类
Scanner是一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器!Scanner取得输入数据的依据是空格符:如按下空格键,Tab键或者Enter键,Scanner就会返回下一个输入。所以说Scanner不能输入空格,如果你希望取得含有空格的字符串BufferedReader可以做到。

public static void main(String[] args) throws FileNotFoundException { 
    Scanner s = new Scanner("123 asdf sd 45 789 sd"); 
    while (s.hasNext()) { 
        System.out.println(s.next()); 
    } 
}

相关学习
缓冲流,对象流,随机流,数据流,序列化和对象克隆

博文推荐
Java笔记 http://blog.csdn.net/peng_hong_fu/article/details/52605935

猜你喜欢

转载自blog.csdn.net/u012869196/article/details/73734103