Java I/O学习(附实例和详解)

一、Java I/O类结构以及流的基本概念

在阅读Java I/O的实例之前我们必须清楚一些概念,我们先看看Java I/O的类结构图:

这里写图片描述

Java I/O主要以流的形式进行读写数据。

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

根据处理数据的数据类型的不同可以分为:字符流和字节流。

字符流和字节流的主要区别:

1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。

2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

3.实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。

下面我们以文件操作作为实例进一步了解。

二、字符流实例

之前提到过“只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流”。因此本字符流操作实例是操作txt文件。对其进行读写操作。

2.1、一些概念

此前,我们需要了解一些概念。

Java采用16位的Unicode来表示字符串和字符的。在写入字符流时我们都可以指定写入的字符串的编码。

这里博主贴出字符流类图结构,方便猿友阅读:

这里写图片描述

在文件操作的时候我们主要使用到FileReader和FileWriter或BufferedReader和BufferedWriter。

从类结构图来看:

FileReader是InputStreamReader的子类,而InputStreamReader是Reader的子类;

FileWriter是OutputStreamWriter的子类,而OutputStreamWriter则是Writer的子类。

2.2、FileReader和BufferedReader的使用

FileReader的常用构造包括以下两种:

(1)FileReader(String fileName):根据文件名创建FileReader对象。

(2)FileReader(File file):根据File对象创建FileReader对象。

FileReader的常用方法包括以下几种:

(1)int read():读取单个字符。返回字符的整数值,如果已经到达文件尾,则返回-1.

(2)int read(char[] cbuf):将字符读入cbuf字符数组。返回读取到的字符数,如果已经到达文件尾,则返回-1.

(3)int read(char[] cbuf,int off,int len):将读取到的字符存放到cbuf字符数组从off标识的偏移位置开始处,最多读取len个字符。

BufferedReader有以下两种构造方法:

(1)BufferedReader(Reader in):根据in代表的Reader对象创建BufferReader实例,缓冲区大小采用默认值。

(2)BufferedReader(Reader in,int sz):根据in代表的Reader对象创建BufferedReader实例,缓冲区大小采用指定sz值。

BufferedReader的常用方法包括以下几种:

(1)int read():返回字符的整数值,如果已经到达文件尾,则返回-1.

(2)int read(char[], int, int):将读取到的字符存放到cbuf字符数组从off标识的偏移位置开始处,最多读取len个字符。

(3)String readLine():读取一文本行。该方法遇到以下字符或者字符串认为当前行结束:‘\n’(换行符),’\r’(回车符),’\r\n’(回车换行)。返回值为该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回null。

代码实例:

package java_io;

import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.FileReader;  
import java.io.IOException;  

public class TestReader {  

    public static void main(String[] args) {  
        TestReader testReader = new TestReader();
        String path = "C:\\Users\\luoguohui\\Desktop\\readerTest.txt";  
        testReader.readFileByFileReader(path); 
        testReader.readFileByBufferedReader(path); 
    }

    public void readFileByFileReader(String path){
        FileReader fileReader = null; 
        try {
            fileReader = new FileReader(path);  
            char[] buf = new char[1024]; //每次读取1024个字符
            int temp = 0; 
            System.out.println("readFileByFileReader执行结果:");
        
  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值