IO(四)字符流练习

public class CharStreamDemo {
    /*
        1、Writer extends Object implements Appendable,Closeable,Flushable
        close();              关闭流
        write(String str);    将字符串输出
        write(char[] c);    将字符数组输出
        flush();            强制清空缓存

        2、Reader extends Object  implements Readable,Closeable;
        close();            关闭输出流
        read();                读取单个字符
        read(char[] c);        将内容读到字符数组,返回读到的长度
     */

    public static void main(String[] args) throws Exception{
//        rotatingStream();
//        executeCharFile();
//        bufferStream();

    }

    /**缓存流*/
    public static void bufferStream() throws Exception{
        try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(CharStreamUtis.readFile),"gbk"));
                BufferedWriter writer = new BufferedWriter(new FileWriter(CharStreamUtis.writeFile))){
            String res = null;
            while ((res=reader.readLine()) != null) {
//                String print = new String(res.getBytes("UTF-8"));
                writer.write(res);
            }
            writer.flush();
        }

        System.out.println("执行完毕");
    }

    /**fileReader、fileWriter 操作文件,里边包装了转换流OutputStreamWriter、inputStreamReader,是对转换流的一个包装,运用此流要注意乱码问题*/
    public static void executeCharFile() throws Exception{
        try(FileReader reader = new FileReader(CharStreamUtis.readFile);
                FileWriter writer = new FileWriter(CharStreamUtis.writeFile)){
            char[] cha = new char[1024];
            int size = reader.read(cha);

            String str = null;
            while(size != -1){
                str = new String(cha,0,size);
                writer.write(str);
                size = reader.read(cha);
            }
        }
        System.out.println("执行完毕");
    }

    /** 转换流,字节转字符 ,其实最终还是以字节的方式进行输入输出的
     * @throws Exception */
    public static void rotatingStream() throws Exception{
        InputStreamReader reader = new InputStreamReader(CharStreamUtis.getByteStream());
        ByteArrayOutputStream byteOutStream = CharStreamUtis.getByteOutStream();

        OutputStreamWriter writer = new OutputStreamWriter(byteOutStream);

        char[] ch = new char[1024];
        int read = reader.read(ch);

        while (read != -1) {
            writer.write(ch,0,read);
            read = reader.read(ch);
        }
        CharStreamUtis.close(writer);
        CharStreamUtis.close(reader);

        System.out.println(byteOutStream.toString());
    }
}
class CharStreamUtis{

    public static final File readFile = new File("D:"+File.separator+"intest.txt");
    public static final File writeFile = new File("D:"+File.separator+"outtest.txt");

    /**将字节从内存流中读出*/
    public static ByteArrayInputStream getByteStream(){
        String str = "我爱中华!";
        ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());
        return in;
    }

    /**将字节写入内存流*/
    public static ByteArrayOutputStream getByteOutStream(){
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        return out;
    }

    public static void close(Closeable closeable){
        if(closeable != null){
            try {
                closeable.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void flush(Flushable flushable){
        if(flushable != null){
            try {
                flushable.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
时间: 2024-11-06 03:52:40

IO(四)字符流练习的相关文章

Java IO(四--字符流基本使用

在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用 Reader: public abstract class Reader implements Readable, Closeable { protected Object lock; private static final int maxSkipBufferSize = 8192; private char[] skipBuffer = null; protected Reader() { this.lock = this; } p

JAVA之IO技术-字符流对象Writer的子类对象FileWriter的使用

  package ioTest.io1; import java.io.File; import java.io.FileWriter; /* * IO技术,按照操作数据的方式分类如下: * 字节流和字符流 * 字节流的两个基类: * InputStream,OutputStream * 字节流的两个基类: * Reader,Writer * 思考一个问题:为什么有了字节流还要出现字符流? * * 先学习字符流的特点. * * 既然IO是操作数据的,那么数据最常见的体现形式 文件 * 需求:

[学习笔记]Java IO之字符流

概述 字符流是专门用于处理文本文件的流,其中包括了文本编码相关转换工作. 字符流只可以处理文本字符数据. 每个字符流都包括一种编码方式,可以使用系统默认,也可以自行设定. 编码 1. 编码表 生活中语言文字和计算机中对应的数据表 2. 常见编码表 ASCII:包括字母和常见符号,1字节编码,首位为0. ISO8859-1:包括拉丁字母,1字节编码,首位为1. GB2312:简体中文码表,包括6~7千汉子及符号,2字节编码,2个字节首位均为1. GBK:中文码表,包括GB2312全部编码,约2万个

文本数据IO操作--字符流

一.Reader和Writer 1. 字符流原理 Reader是所有字符输入流的父类而Writer是所有字符输出流的父类.字符流是以字符(char)为单位读写数据的.一次处理一个unicode.字符流都是高级流,其底层都是依靠字节流进行读写数据的,所以底层仍然是基于字节读写数据的.2. 常用方法 Reader的常用方法:int read()读取一个字符,返回的int”值低16”位有效. 其实返回的是char 若返回的是-1 则读取到末尾 int read(char[] chs)从该流中读取一个字

Java学习笔记之 IO包 字符流

字符流:Writer/Reader(字符流) 通过子类FileWriter和FileReader实现父类实例化 package iotest; import java.io.File; import java.io.Writer; import java.io.Reader; import java.io.FileWriter; import java.io.FileReader; public class OutputStreamDemo2 { public static void main(

Java IO之字符流

1.         字符流 在程序中一个字符等于两个字节,Java为我们提供了Reader和Writer两个专门操作字符流的类 1)        字符输出流:Writer Writer是一个字符流,它是一个抽象类,所以要使用它,也必须通过其子类来实例化它后才能使用它. Writer类的常用方法 方法名称 描述 public abstract void close() throws IOException 关闭输出流 public void write(String str) throws I

Java中的IO操作 字符流:FileReader和 FileWriter

FileReader和 FileWriter  读写字符串 1 package object.io; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 9 public class FileWrite { 10 11 public s

Java基础:IO流之字节流和字符流

1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL. 流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流.用户可以从输入流中读取信息,但不能写它.相反,对输出流,只能往输入流写,而不能读它. 实际上,流的源端和目的端可简单地看成是字节的生产者和消费

Java学习笔记38(字符流)

字符输出流:Writer类:使用时候需要它的子类 局限性:只能写文本文件,无法写其他文件 方法: package demo; import java.io.FileWriter; import java.io.IOException; public class WriterDemo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("d:\\java.txt&q