Java-IO流2

字符流

  • 字符流的父类(抽象类):
    • Reader:字符输入流
      • public int read(){}
        public int read(char[] c){}
        public int read(char[] b,int off,int len){}
    • Writer:字符输出流
      • public int write(int n){}
        public int write(String str){}
        public int write(char[] c){}

 文件字符流

  • FileReader
    • public int read(char[] c)
      //从流中读取多个字符,将读入内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。
  • FileWriter
    • public void write(String str)
      //一次写多个字符,将b数组中所有字符,写入输出流。

 FileReader

import java.io.FileReader;

/**
 * 使用FileReader读取文件
 */
public class Demo02 {
    public static void main(String[] args) throws Exception {

        //创建FileReader文件字符输入流
        FileReader fr = new FileReader("d:\\hello.txt");

        //读取字符
        //单个读取
//        int date = 0;
//        while ((date= fr.read())!=-1){
//            System.out.println((char) date);
//        }
//        System.out.println();

        char[] buf=new char[1024];
        int count=0;
        while ((count=fr.read(buf))!=-1){
            System.out.println(new String(buf,0,count));
        }

        //关闭
        fr.close();
        System.out.println("执行完毕");

    }
}

FileWriter

import java.io.FileWriter;

/**
 * 使用FileWriter写入文件
 */
public class Demo03 {
    public static void main(String[] args) throws Exception {
        //1创建FileWrite对象
        FileWriter fw = new FileWriter("d:\\write.txt");
        //写入
        for (int i = 0; i < 10; i++) {
            fw.write("Java\n");
            fw.flush();
        }

        //关闭
        fw.close();
        System.out.println("执行完毕");

    }
}

实战

import java.io.FileReader;
import java.io.FileWriter;

/**
 * 使用FileReader和FileWriter复制文本文件,不能复制图片等二进制文件。
 * 使用字节流复制任意文件
 */
public class Demo04 {
    public static void main(String[] args) throws Exception {
        //创建对象
        FileWriter writer = new FileWriter("d:\\write.txt");
        FileReader reader = new FileReader("d:\\hello.txt");

        //复制文件
//        int date=0;
//        while ((date= reader.read())!=-1){
//            writer.write(date);
//        }
        char[] buf = new char[1024];
        int count=0;
        while ((count= reader.read(buf))!=-1){
            writer.write(new String(buf,0,count));
        }
        writer.flush();

        //关闭
        reader.close();
        writer.close();
        System.out.println("复制完毕");

    }
}

字符缓冲流

  • 缓冲流:BufferedReader/BufferedWriter
    • 高校读写。
    • 支持输入换行符。
    • 一次写一行、读一行

BufferedReader

import java.io.BufferedReader;
import java.io.FileReader;

/**
 * 使用BufferedReader字符缓冲流读取文件
 */
public class Demo05 {
    public static void main(String[] args) throws Exception{
        //1创建缓冲流
        FileReader fr = new FileReader("d:\\hello.txt");
        BufferedReader br = new BufferedReader(fr);

        //2读取
        //2.1read()读取
//        char[] buf = new char[1024];
//        int count=0;
//        while ((count=br.read(buf))!=-1){
//            System.out.println(new String(buf,0,count));
//        }
        //2.2readLine()读取
        String line = null;
        while ((line=br.readLine())!=null){
            System.out.println(line);
        }
        System.out.println();



        //关闭
        br.close();
        System.out.println("执行完毕");

    }
}

BufferedWriter

import java.io.BufferedWriter;
import java.io.FileWriter;

/**
 * 使用BufferedWriter写入数据。
 */
public class Demo06 {
    public static void main(String[] args) throws Exception{
        //创建对象
        FileWriter fw = new FileWriter("d:\\buffer.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        //写入数据
        for (int i = 0; i < 10; i++) {
            bw.write("java");//写入java
            bw.newLine();//写入一个换行符   Windows \r\n  Linux  \n
            bw.flush();//刷新
        }
        //关闭IO流
        bw.close();
        System.out.println("执行完毕");
    }
}

打印流

  • PrintWriter:
    • 封装了print()/println()方法,支持写入后换行。
    • 支持数据原样打印。
import java.io.PrintWriter;

/**
 * 演示PrintWriter的使用
 */
public class Demo07 {
    public static void main(String[] args) throws Exception{
        //创建对象
        PrintWriter pw = new PrintWriter("d:\\print.txt");
        //写入数据
        pw.println(97);
        pw.println(true);
        pw.println(3.14);
        pw.println('c');
        //关闭
        pw.close();
        System.out.println("打印完毕");

    }
}

转换流

  • InputStreamReader/OutputStreamWriter
    • 可将字节流转换为字符流。
    • 可以设置字符编码方式。

InputStreamReader

import java.io.FileInputStream;
import java.io.InputStreamReader;

/**
 * 使用InputStreamReader读取文件,指定使用的编码
 */
public class Demo01 {
    public static void main(String[] args) throws Exception{
        //创建对象
        FileInputStream fis = new FileInputStream("d:\\write.txt");
        InputStreamReader isr = new InputStreamReader(fis,"utf-8");//要保证编码与解码方式一致,否则出现乱码
        //读取文件
        //单个
        int date = 0;
        while ((date=isr.read())!=-1){
            System.out.print((char) date);
        }
        System.out.println();
        //关闭
        isr.close();
        System.out.println("执行完毕");

    }
}

OutputStreamWriter

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

/**
 * 使用OutputStreamWriter写入文件,指定编码
 */
public class Demo02 {
    public static void main(String[] args) throws Exception{
        //创建OutputStreamReader对象
        FileOutputStream fos = new FileOutputStream("d:\\output.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos, "gbk");
        //写入文件
        for (int i = 0; i < 10; i++) {
            osw.write(97);
            osw.write("你好");
            osw.write("word\n");
            osw.flush();
        }
        //关闭
        osw.close();
        System.out.println("执行完毕");

    }
}

Guess you like

Origin blog.csdn.net/Mr_yao0/article/details/121324693