Java IO流--使用FileReader字符输入流读入数据到java程序或者内存的基本操作

简介: Java IO流--使用FileReader字符输入流读入数据到java程序或者内存的基本操作

前言:

1、流的分类:

  • 1.操作数据单位:字节流、字符流
  • 2.数据的流向:输入流、输出流
  • 3.流的角色:节点流、处理流

2、 流的体系结构:

二、流的体系结构
抽象基类         节点流(或文件流)                               缓冲流(处理流的一种)
InputStream     FileInputStream   (read(byte[] buffer))        BufferedInputStream (read(byte[] buffer))
OutputStream    FileOutputStream  (write(byte[] buffer,0,len)  BufferedOutputStream (write(byte[] buffer,0,len) / flush()
Reader          FileReader (read(char[] cbuf))                 BufferedReader (read(char[] cbuf) / readLine())
Writer          FileWriter (write(char[] cbuf,0,len)           BufferedWriter (write(char[] cbuf,0,len) / flush()

FileReader的相关方法如下:

注意点:

  1. read()方法的理解:返回读入的一个字符,如果达到文件的末尾,则返回-1
  2. 异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理
  3. 读入程序中的文件一定要存在,否则会报FileNotFoundException异常

使用一:

public class FileTest1 {
    @Test
    public void test1(){
        FileReader fr=null;
        try {
            //1.实例化file类的对象,指明要操作的文件
            File file = new File("hello.txt");
            //2.提供具体的流
            fr = new FileReader(file);
            //3.数据的读入
            //read():返回读入的一个字符,如果达到文件的末尾,则返回-1
            int data;
            while ((data=fr.read())!=-1){
                System.out.print((char)data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fr!=null) {
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

输出结果:

abcdef

二、对read()方法进行操作升级,使用read的重载方法

@Test
    public void FileReaderTest(){
        FileReader fr = null;
        try {
            //1.实例化File类的对象
            File file = new File("hello.txt");
            //2.提供具体的流 FileRead流的具体实例化
            fr = new FileReader(file);
            //3.数据的读入
            int len;
            char[] cbuf = new char[5];
            //read(char cbuf[]):返回每次读入cbuf数组中的字符的个数,如果达到文件末尾,则返回-1
            while ((len=fr.read(cbuf))!=-1){
                for (int i = 0; i <len ; i++) {
                    System.out.print(cbuf[i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //4.资源的关闭
                if (fr!=null) {
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

输出结果:

abcdefhigklmn

使用二:

public class FileReader_ {
    /**
     * 单个字符读取文件
     */
    @Test
    public void fileReader01() {
        String filePath = "D:\\story.txt";
        FileReader fileReader = null;
        int data = 0;
        try {
            fileReader = new FileReader(filePath);
            //循环读取使用read,单个字符读取
            while ((data = fileReader.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileReader != null) {
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 使用字符数组读取文件
     */
    @Test
    public void fileReader02() {
        String filePath = "D:\\story.txt";
        FileReader fileReader = null;
        int readLen = 0;
        char[] buf = new char[8];
        try {
            fileReader = new FileReader(filePath);
            //循环读取使用read(buf),返回的是实际读取到的字符数
            //如果返回-1,说明文件结束
            while ((readLen = fileReader.read(buf)) != -1) {
                System.out.print(new String(buf, 0, readLen));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileReader != null) {
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


目录
相关文章
|
1天前
|
存储 Java
深入理解Java虚拟机:JVM内存模型
【4月更文挑战第30天】本文将详细解析Java虚拟机(JVM)的内存模型,包括堆、栈、方法区等部分,并探讨它们在Java程序运行过程中的作用。通过对JVM内存模型的深入理解,可以帮助我们更好地编写高效的Java代码,避免内存溢出等问题。
|
2天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
9 0
|
2天前
|
存储 机器学习/深度学习 Java
【Java探索之旅】数组使用 初探JVM内存布局
【Java探索之旅】数组使用 初探JVM内存布局
11 0
|
2天前
|
小程序 Java 程序员
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
12 0
|
2天前
|
存储 Java Linux
【Java EE】 文件IO的使用以及流操作
【Java EE】 文件IO的使用以及流操作
|
2天前
|
数据采集 存储 前端开发
Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型
2024年北京车展凸显电动车全球热度,中国引领市场,展出117台全球首发车,包括30台跨国公司电动车。借助Nutch库抓取汽车网站数据,分析电动车市场趋势。通过配置代理和多线程爬虫,高效收集新车信息,助力理解市场动态,推动可持续交通发展。
Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型
|
3天前
|
Oracle Java 关系型数据库
Java历史简述及程序运行机制简述
Java起源于1991年Sun公司James Gosling领导的Green项目,最初命名为Oak,后因爪哇岛咖啡更名为Java。1995年正式发布,2009年Sun被Oracle收购。Java程序运行包括:开发源代码、编译成字节码、JVM翻译为平台兼容的机器码执行。
|
3天前
|
存储 Java 测试技术
Java基础IO总结(下)
Java基础IO总结(下)
8 0
|
3天前
|
存储 Java
Java基础IO总结(上)
Java基础IO总结(上)
9 0
|
3天前
|
安全 Java 编译器
Java面向对象思想以及原理以及内存图解(下)
Java面向对象思想以及原理以及内存图解(下)
11 0