JAVA之io流

一、概念:

1、字节流和字符流:

一次处理一个字节byte的,叫字节流;一次处理一个字符char的,叫字符流。

  • 在处理中文的时候,经常会用到字符流。
  • 字符流在使用时会有编码问题。
  • 字节流和字符流可以相互转换,有专门的通道,编码就是在通道中完成的。

2、节点流和过滤流:

原始流的开始或结束的地方,叫节点流;提供对流进行功能扩充的流,叫过滤流,比如:文件的压缩、加密、解密等。

3、缓冲流:

buffer。可以解决字节流读取速度慢的问题,可以一字节一字节的读入到缓冲流中,再一次性写出到磁盘。

4、输入流是读,输出流是写。

  • 读和写是针对于内存来说的,从磁盘读入到内存,是输入;从内存写入到磁盘,是输入出。
  • 对应于字符流的是抽象类Reader和Writer。
  • 对应于字节流的是抽象类InputStream和OutputStream

二、应用:

1、字节流的应用:配置文件的处理。

输出流使用.write()方法写出,输入流使用.read()方法读入。

输出流使用.flush()方法将内容刷入到磁盘里,目前java的.close()方法中自带有flush()方法,因此.flush()方法不写也可以。

  • 输出流FileOutputStream:如果文件不存在,会自动创建;
  • 输入流FileInputStream:如果文件不存在,不会创建。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class StreamDemo {
    public static void main(String[] args) throws Exception {
    FileOutputStream fos = new FileOutputStream("b.txt");
        fos.write(1);
        fos.flush(); //用于将内容刷入到磁盘里
        fos.close(); //java的close()自带flush(),不写flush()也可以。

        FileInputStream fis = new FileInputStream("b.txt");
        int x = fis.read(); //.read()是一个字节一个字节的读
        System.out.println(x); //由于字节流读入的都是二进制字节,不会显示成数字或字母,而是乱码
} }

 2、字符流的应用:

import java.io.*;

public class CharStreamDemo {
    public static void main(String[] args) throws IOException {
        PrintWriter out = new PrintWriter("test1.txt");
        out.println("大家好");
        out.println("haha");
        out.close();
        //        BufferedReader是PrintWriter的初级版
        PrintWriter out2 = new PrintWriter("test1.txt");
        out2.println("你也好");
        out2.println("hi");
        out2.close();
    }
} 

//使用这种方式写的文件,文件内容会覆盖,最终只会留下 "你也好""hi"

3、字符流与字节流结合使用:

使用字符流与字节流结合的方式,解决两个问题:1、可以设置编码类型  2、可以对文件内容进行追加写,而不会覆盖。

import java.io.*;

public class CharStreamDemo {
    public static void main(String[] args) throws IOException {
    PrintWriter out3 = new PrintWriter(
                new OutputStreamWriter( //OutputStreamWriter是字节流和字符流中间的通道
                new FileOutputStream("test1.txt",true), //true为是否追加
                        "utf-8")); //这里设置编码类型
        out3.println("都好");
        out3.close();

使用.readLine()方法,可以一行一行读入。

import java.io.*;

public class CharStreamDemo {
    public static void main(String[] args) throws IOException {
    BufferedReader in = new BufferedReader(
                        new InputStreamReader( //InputStreamReader是字符流和字节流的通道
                        new FileInputStream("test1.txt")));
        String str = in.readLine(); //一行一行读
        System.out.println(str);
        System.out.println("===================");

        //全部读取
        String str1 = null;
        while ((str1 = in.readLine())!=null){ //这样写的好处是避免二次读入占用内存
            System.out.println(str1);
        }
        in.close();
    }
} 
        //结果:
//        你也好
//        ===================
//        hi
//        都好

 

posted @ 2019-05-08 18:10  意如柳  阅读(300)  评论(0编辑  收藏  举报