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()

image

FileReader的相关方法如下:

image

注意点:

  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();
            }
        }
    }
}


目录
相关文章
|
23天前
|
存储 网络协议 安全
探索Java通信面试的奥秘:揭秘IO模型、选择器和网络协议,了解面试中的必备知识点!
通过深入探索Java通信面试的奥秘,我们将揭秘Java中的三种I/O模型(BIO、NIO和AIO)、选择器(select、poll和epoll)以及网络协议(如HTTP和HTTPS),帮助您了解在面试中必备的知识点。这些知识点对于网络编程和系统安全方面的求职者来说至关重要,掌握它们将为您的职业发展打下坚实的基础!
|
1月前
|
存储 Java
[java进阶]——高级IO流家族,序列化流、打印流、压缩流、转换流
[java进阶]——高级IO流家族,序列化流、打印流、压缩流、转换流
|
1月前
|
存储 移动开发 Java
[java进阶]——IO流基本字节流和字符流,字符流中的缓冲流,递归实现多级文件拷贝
[java进阶]——IO流基本字节流和字符流,字符流中的缓冲流,递归实现多级文件拷贝
|
2月前
|
存储 移动开发 Java
Java的第十四篇文章——文件和IO流(后期再学一遍)
Java的第十四篇文章——文件和IO流(后期再学一遍)
|
2月前
|
存储 Java 数据处理
Java IO流
Java I/O(Input/Output)流是Java中处理输入和输出的机制。它提供了一种统一的方式来读取和写入各种类型的数据,包括字节、字符、对象等。I/O流是Java程序与外部世界进行交互的关键组件之一。Java I/O流分为两类:字节流(Byte Streams)和字符流(Character Streams)。此外,Java还提供了一系列其他类型的流,如对象流(ObjectStreams)、管道流(PipeStreams)等,用于处理特定的数据类型或应用场景。
14 0
|
2月前
|
Java
【面试题精讲】Java IO 模型
【面试题精讲】Java IO 模型
|
2月前
|
存储 Java API
|
2月前
|
Java Unix Linux
深入探讨I/O模型:Java中的阻塞和非阻塞和其他高级IO应用
I/O(Input/Output)模型是计算机科学中的一个关键概念,它涉及到如何进行输入和输出操作,而这在计算机应用中是不可或缺的一部分。在不同的应用场景下,选择正确的I/O模型是至关重要的,因为它会影响到应用程序的性能和响应性。本文将深入探讨四种主要I/O模型:阻塞,非阻塞,多路复用,signal driven I/O,异步IO,以及它们的应用。
深入探讨I/O模型:Java中的阻塞和非阻塞和其他高级IO应用
|
2月前
|
NoSQL Java Linux
Java 三大IO
Java 三大IO
16 0
|
2月前
|
Java API
【精通Java篇 | IO流】详讲字节流与常用方法
【精通Java篇 | IO流】详讲字节流与常用方法
29 0
热门文章
最新文章
相关产品
云迁移中心
推荐文章
更多