资讯专栏INFORMATION COLUMN

Java IO学习笔记三

CodeSheep / 2458人阅读

摘要:学习笔记三在整个包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流字符流的转换类。是字节流通向字符流的桥梁它使用指定的读取字节并将其解码为字符。主要的功能还是向文件中写入文件构造函数创建使用默认字符编码的。

Java IO学习笔记三

在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类。

OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变成字节流的输出对象。

InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变成字符流的输入对象。

一般在操作输入输出内容就需要使用字节或字符流,但是有些时候需要将字符流变成字节流的形式,或者将字节流变为字符流的形式,所以,就需要另外一组转换流的操作类。

InputStreamReader

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

主要的功能还是从文件中读取内容,不过是一次性的读取多个字节,这个很像它的子类FileReader

构造函数

InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader,不过这里的InputStream是抽下类,因此可以使用它的子类FileInputStream实例化,这里的FileInputStream是操作字节流的,显然看出这个类的作用就是字符流和字节流的桥梁

常用方法

close()

int read() 读取单个字符

int read(Char[] c) 读取字符存储在字符数组中

int read(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分

boolean ready() 判断此流是否已经准备好用于读取。

实例
package IO;

import java.io.*;

/**
 * Created by chenjiabing on 17-5-24.
 */
public class demo4 {
    public static void main(String args[]) {
        File file = new File("/tmp" + File.separator + "test" + File.separator + "test.txt");
        InputStreamReader inputStreamReader = null;
        try {
            inputStreamReader = new InputStreamReader(new FileInputStream(file));  //初始化
            char[] c = new char[(int) file.length()];   //创建数组
            try {
                int len = inputStreamReader.read(c);   //将内容读取到数组中
                System.out.println(len);
                for (int i = 0; i < c.length; i++) {
                    System.out.print(c[i]);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if(inputStreamReader!=null)
            {
                try {
                    inputStreamReader.close();   //关闭
                }catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }

    }
}

注意:从上面的代码中可以看到这个和FileReader的操作是一样的,只是构造的方法不一样

OutputStreamWriter

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。

主要的功能还是向文件中写入文件

构造函数

OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。这里同样是抽象类,所以用它的子类FileOutputStream实例化

常用方法

close()

flush()

write(String str) 写入字符串

void write(String str, int off, int len) 写入字符串的某一部分。

write(int c) 写入单个字符

void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。

实例
package IO;

import java.io.*;

/**
 * Created by chenjiabing on 17-5-24.
 */
public class demo5 {
    public static void main(String[] args)
    {
        File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt");
        OutputStreamWriter outputStreamWriter=null;
        try {
            outputStreamWriter=new OutputStreamWriter(new FileOutputStream(file,true));
            String str="陈加兵
";
            int data=48;
            String name="chenjiabing";
            try {
                outputStreamWriter.write(str);
                outputStreamWriter.write(data);
                outputStreamWriter.write(name,0,2);   //写入字符串的一部分
            }catch (IOException e)
            {
                e.printStackTrace();
            }
        }catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }finally {
            if(outputStreamWriter!=null)
            {
                try {
                    outputStreamWriter.flush();
                    outputStreamWriter.close();
                }catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
}

从上面可以看出OutputStreamWriterFileWriter的用法一样

参考文章

http://www.cnblogs.com/lich/archive/2011/12/11/2283848.html

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67125.html

相关文章

  • Java学习笔记5-方法、流(Stream)、文件(File)和IO

    摘要:是方法返回值的数据类型。方法名和参数表共同构成方法签名。构造方法和它所在类的名字相同,但构造方法没有返回值。输入流表示从一个源读取数据,输出流表示向一个目标写数据。下图是一个描述输入流和输出流的类层次图。有多种构造方法可用来创建对象。 我们经常使用到 System.out.println(),那么它是什么呢? 一、系统方法 我们经常使用到 System.out.println(),那么...

    suemi 评论0 收藏0
  • Java进阶之路

    摘要:探索专为而设计的将探讨进行了何种改进,以及这些改进背后的原因。关于最友好的文章进阶前言之前就写过一篇关于最友好的文章反响很不错,由于那篇文章的定位就是简单友好,因此尽可能的摒弃复杂的概念,只抓住关键的东西来讲,以保证大家都能看懂。 周月切换日历 一个可以进行周月切换的日历,左右滑动的切换月份,上下滑动可以进行周,月不同的视图切换,可以进行事件的标记,以及节假日的显示,功能丰富 Andr...

    sushi 评论0 收藏0
  • JAVA学习笔记036-第一个简单的Mybatis程序(代码经验证)

    摘要:目标创建一个简单的框架的程序,实现对数据库的读取操作。的核心配置文件核心配置文件,配置数据库连接信息事物等每一个都需要在核心配置文件中注册工具类获取第一步获取对象既然有了,顾名思义,我们可以从中获得的实例。 ...

    itvincent 评论0 收藏0
  • 多线程学习笔记(2):多线程基础

    摘要:和方法用来设置线程是否成为守护线程和判断线程是否是守护线程。守护线程依赖于创建它的线程,随它的消亡而消亡。使用提供的方法,提醒线程终止,但是否真正终止由线程自己决定。参考实战高并发程序设计多线程干货系列一多线程基础 一、如何创建多线程 1、继承Thread类 public class MyThread extends Thread { @Override public ...

    HelKyle 评论0 收藏0
  • 多线程学习笔记(1):volatile和synchronized

    摘要:今天开始整理学习多线程的知识,谈谈最重要的两个关键字和。但是这样一个过程比较慢,在使用多线程的时候就会出现问题。有序性有序性是指多线程执行结果的正确性。这种机制在多线程中会出现问题,因此可以通过来禁止重排。 今天开始整理学习多线程的知识,谈谈最重要的两个关键字:volatile和synchronized。 一、三个特性 1、原子性 所谓原子性操作就是指这些操作是不可中断的,要么执行过程...

    jk_v1 评论0 收藏0

发表评论

0条评论

CodeSheep

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<