JAVA入门—————IO流——字符流——OutputStreamWriter——BufferedWriter_BufferedReader

字符流

字符流写完后必须刷新!!!

  • 只能读写文本文件
  • 字符流 = 字节流 + 编码表
  • Reader 抽象类 字符输入流的父类
  • Writer 抽象类 字符输出流的父类
编码——发出
  • 概念:把字符串转换成字节数组
public byte[] getBytes()——使用平台的默认字符集将此 String编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
public byte[] getBytes(String charsetName)——使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
解码——接收
  • 概念:把字节数组转换成字符转数组
public String(byte[] bytes)——通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
public String(byte[] bytes, String charsetName)——通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。

使用A型字符集进行编码,则使用A型字符集进行解码 使用同一种编码表 否则会出现乱码

OutputStreamWriter ————字符流输出

  • 概念:字符流通向字节流的桥梁 ——使用指定的字符集将写入流中的字符编码成字节
OutputStreamWriter(OutputStream out)——创建使用默认字符编码的 OutputStreamWriter
OutputStreamWriter(OutputStream out, String charsetName)——创建使用指定字符集的 OutputStreamWriter
  OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("b.txt",true), "UTF-8");
public void write(int c)——写一个字符
public void write(char[] cbuf)——写一个字符数组
public void write(char[] cbuf,int off,int len)——写一个字符数组的 一部分
public void write(String str)——写一个字符串
public void write(String str,int off,int len)——写一个字符串的一部分
eg:	OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("b.txt"));
        out.write("123");
        out.write("你好");
        out.write('我');
        char[] chars = {'a','b','c','你'};
        out.write(chars);
        out.write(chars,0,2);
        String s = "你好吗同学";
        out.write(s);
        out.write(s,0,2);
        out.close();————————刷新且释放资源

InputStreamReader————字符流输入

  • 概念:字节流通向字符流的桥梁
InputStreamReader(InputStream is)——用默认的编码(GBK)读取数据
InputStreamReader(InputStream is,String charsetName)——用指定的编码读取数据
InputStreamReader(InputStream in)创建一个使用默认字符集的 InputStreamReader
InputStreamReader(InputStream in, String charsetName)——创建使用指定字符集的 InputStreamReader
public int read()——一次读取一个字符
public int read(char[] cbuf)——一次读取一个字符数组 如果没有读到 返回-1
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class demo3 {
    public static void main(String[] args) throws IOException {
        InputStreamReader in = new InputStreamReader(new FileInputStream("b.txt"));
        int read = in.read();
        System.out.println(read);
        char[] chars = new char[1024*8];
        int read1 = in.read(chars);——————返回读取到的有效字符个数
        System.out.println(read1+"个有效字符");
        String s = new String(chars);————————将字节数组转换成字符串
        System.out.println(s);
         System.out.println("----------------------------------");
        InputStreamReader in1 = new InputStreamReader(new FileInputStream("b.txt"));
        char[] chars1 = new char[1024];
        int len = in1.read(chars1, 0, 10);————————选取一部分字符进行读取
        System.out.println(len);
        for (char c : chars1) {
            System.out.println(c);——————10个有效字符  其余为空值null
        }
        in.close();
    }
}

字符流复制文本

import java.io.*;
public class demo4 {
    public static void main(String[] args) throws IOException {
        InputStreamReader in = new InputStreamReader(new FileInputStream("a.txt"));
        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("C:\\Users\\ZY\\Desktop\\JAVA练习文件\\a.txt"));
        int len = 0;
        while((len = in.read())!=-1){
            out.write(len);
            out.flush();
        }
        in.close();
        out.close();
    }
}

高效读取并复制——创建一个字符数组充当缓冲区

eg:	InputStreamReader in = new InputStreamReader(new FileInputStream("a.txt"));
        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("C:\\Users\\ZY\\Desktop\\JAVA练习文件\\a2.txt"));
        int len = 0;
        char[] chars = new char[1024];
        while((len = in.read(chars))!= -1){
            System.out.println("读取次数");
            out.write(chars,0,len);
            out.flush();
        }
        System.out.println("复制完成!");
        in.close();
        out.close();

FileWriter——便捷字符输出流

FileReader——便捷字符输入流

  • 缺点:不能指定编码表 只能使用平台默认编码表
FileReader(File file)——在给定从中读取数据的 File 的情况下创建一个新 FileReader
FileReader(String fileName)——在给定从中读取数据的文件名的情况下创建一个新 FileReader

BufferedWriter———高效输出流

BufferedReader———高效输入流

BufferedReader(Reader in)——创建默认大小输入缓冲区的缓冲字符输入流。
BufferedWriter(Writer out)——创建默认大小输出缓冲区的缓冲字符输出流
eg:	BufferedReader bfr = new BufferedReader(new InputStreamReader(new FileInputStream("c.txt")));
        BufferedWriter bfw = new BufferedWriter(new FileWriter("c2.txt"));

BufferedWriter和BufferedReader独特的方法

BufferedWriter: public void newLine()—— 具有系统兼容性的换行符
BufferedReader: public String readLine()——一次读取一行数据 是以换行符为标记的 读到换行符就换行 没读到数据返回null 包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
eg:	BufferedReader bfr = new BufferedReader(new InputStreamReader(new FileInputStream("c.txt")));
        BufferedWriter bfw = new BufferedWriter(new FileWriter("c3.txt"));
        String line = null;
        char[] chars = new char[1024];
        while ((line = bfr.readLine())!=null){——————字符串不为空时应该是null
            bfw.write(line);——————一次读取一行
            bfw.newLine();
            bfw.flush();
        }

需求:把ArrayList集合中的字符串数据存到文本文件

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class demo7 {
    public static void main(String[] args) throws IOException {
        ————————把集合数组中的数据存储在文本文件中
        ArrayList<String> list = new ArrayList<>();
        list.add("小华");
        list.add("小丽");
        list.add("小张");
        list.add("小明");
        BufferedWriter bfw = new BufferedWriter(new FileWriter("name.txt"));
        for (String s : list) {
            bfw.write(s);
            bfw.newLine();
            bfw.flush();
        }
        bfw.close();
    }
}

需求:从文本文件中读取数据到集合中,并遍历集合

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class demo8 {
    public static void main(String[] args) throws IOException {
        //把文本文件中的数据读取储存在集合中
        BufferedReader bfr = new BufferedReader(new FileReader("name.txt"));
        ArrayList<String> list = new ArrayList<>();
        while (true){
            String s = bfr.readLine();
            if(s == null){
                break;
            }
            list.add(s.trim());
        }
        System.out.println("读取完毕");
        System.out.println(list);
        bfr.close();
    }
}

从文本文件中生成随机人名单

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
public class demo9 {
    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new FileReader("name.txt"));
        ArrayList<String> list = new ArrayList<>();
        while (true){
            String s = bfr.readLine();
            if(s==null){
                break;
            }
            list.add(s.trim());
        }
        bfr.close();
        Random random = new Random();
        int i = random.nextInt(list.size());
        System.out.println(list.get(i));
    }
}

复制单级文件夹

import java.io.*;
public class demo10 {
    public static void main(String[] args) throws IOException {
        //复制单级文件夹
        File file = new File("C:\\Users\\ZY\\Desktop\\JAVA练习文件");
        File file1 = new File("E:\\Java练习文件");
        if(!file1.exists()){
            file1.mkdirs();
        }
        //递归判断
        digui(file, file1);
        System.out.println("复制完成");
    }
    private static void digui(File file, File file1) throws IOException {
        File[] files = file.listFiles();
        for (File f : files) {
            if(f.isFile()){
                //复制文件
                copyFile(f, file1);
            }
        }
    }
    private static void copyFile(File file, File file1) throws IOException {
        FileInputStream in = new FileInputStream(file);
        File file2 = new File(file1, file.getName());
         /*String name = file.getName(); ————改后缀名
        if(name.endsWith(".png")){
            name = name.substring(0,name.lastIndexOf("."));
        }
        File file2 = new File(file1, name + ".jpg");*/
        FileOutputStream out = new FileOutputStream(file2);
        int len = 0;
        byte[] bytes = new byte[1024 * 8];
        while((len = in.read(bytes))!=-1){
            out.write(bytes,0,len);
            out.flush();
        }
        in.close();
        out.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值