当前位置: 首页 > news >正文

Java第17章 - I/O流(一)

目录

File类

 认识Java的流

使用字节流读写文本文件

使用字符流读写文本文件

读写二进制文件


File类

(1)在Java程序中通过使用java.io包提供的一些接口和类,对计算机中的文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作。

(2)File对象既可以表示文件,也可以表示目录,在程序中一个File对象可以代表一个文件或目录。

(3)利用File类可以来对文件或目录进行基本操作。它可以查出与文件相关的信息,如名称、最后修改日期、文件大小等。

(4)File类的常用构造方法如下所示:

(5)File类的常用方法如下所示:

 

 认识Java的流

(1)读文件是指把文件中的数据读取到内存中。
(2)写文件是把内存中的数据写到文件中。
(3)Java程序通过流来读写文件。
(4)流是指一连串流程的字符,是以先进先出的方式发送和接收数据的通道。
(5)流分为输入流和输出流,输入/输出流是相对于计算机内存来说的,如果数据输入到内存,则为输入流,如果从内存中输出则为输出流。

(6)Java的输出流主要有OutputStream类和Writer类作为基类,输入流主要由InputStream类和Reader类作为基类。
(7)在java.io包中,封装了许多输入/输出流的API,在程序中,这些输入/输出流类的对象称为流对象。
(8)可以通过流对象将内存中的数据以流的方式写入文件,也可以通过流对象将文件中的数据以流的方式读取到内存。
(9)构造流对象时往往会和数据源(如文件)联系起来。数据源分为源数据源和目标数据源。输入流关联的是源数据源;输出流关联的是目标数据源。

(10)输入/输出流又分为字节流和字符流两种形式

        字节流是8位通用字节流,其基本单位是字节。字节流的基类是InputStream类和OutputStream类,它们是抽象类。

        字符流是16位Unicode字符流,基本单位是Unicode字符。字符流最适合用来处理字符串和文本,因为它们支持国际上大多数的字符集和语言。字符流的基类是Reader类和Writer类,它们是抽象类。

(11)一个被访问的流基本特征都是通过实现InputStream类、OutputStream类、Reader类和Writer类这4个抽象类的方法建立的。

(12)InputStream类常用方法如下:

InputStream类的常用子类有FileInputStream,用于从文件中读取数据。

(13)OutputStream类常用方法如下:

OutputStream类的常用子类有FileOutputStream,用于向文件写数据。

(14)Reader类常用方法如下:

  Reader类的常用子类有BufferedReader,接受Reader对象作为参数,并对其添加字符缓冲器。

 (15)Write类常用方法如下:

Write类的常用子类有BufferedWrite,用于将数据缓冲到字符输出流。

(16)在操作上字节流和字符流还有一个区别,字符流在操作时使用了缓冲区(内部存储器),而字节流在操作时直接操作文件,不会使用缓冲区。

(17)流中的方法在出现错误时都会抛出IOException异常。

使用字节流读写文本文件

(1)使用字节流类FileInputStream读文本文件 

        FileInputStream称为文件输入流,它是字节输入流InputStream抽象类的一个子类,它的作用是将文件中的数据输入到内部存储器(简称内存)中,可以利用它来读取文本文件中的数据,具体实现步骤如下:

        1)导入相关的类

                import java.io.IOException;

                import java.io.InputStream;

                import java.io.FileInputStream;

        2)构造一个文件输入流对象

                InputStream fileObject = new FileInputStream("text.txt");//此时的文件输入流对象fileObject就和源数据源(text.txt)关联起来。

        3)利用文件输入流类的方法读取文本文件中的数据

                fileObject.available();//可读取的字节

                fileObject.read();//读取文件的数据

        4)关闭文件输入流对象

                fileObject.close();

(2)使用字节流类FileOutputStream写文本文件

        FileOutputStream称为文件输出流,它是字节输出流OutputStream抽象类的子类,它的作用是把内存中的数据输出到文件中,可以利用它把内存中的数据写入到文本文件中,具体实现步骤如下:

        1)导入相关的类

                import java.io.IOException;

                import java.io.OutputStream;

                import java.io.FileOutputStream;

        2)构造一个文件输出流对象

        OutputStream fos = new FileOutnputStream("text.txt");//此时的文件输出流对象fos就和目标数据源(text.txt)关联起来。

        3)利用文件输出流类的方法把数据写入到文本文件中。

                String str = "好好学习Java";

                byte[] words = str.getBytes();

                fos.write(words,0,words.length);//利用write方法将数据写入到文件中去

        4)关闭文件输入流对象

                fos.close();

使用字符流读写文本文件

(1) 使用字符流类BufferedReader和FileReader读文本文件

        BufferedReader和FileReader两个类都是Reader抽象类的子类,它们可以通过字符流的方式读取文件,并使用缓冲区,提高了读文本文件的效率。读取文本文件的具体步骤如下:

        1)导入相关的类

                import java.io.FileReader;

                import java.io.BufferedReader;

                import java.io.IOException

        2)构造一个BufferedReader对象

                FileReader fr = new FileReader("mytest.txt");

                BufferedReader br = new BufferedReader(fr);

        3)利用BufferedReader类的方法读取文本文件中的数据

                br.readLine();//读取一行数据,返回字符串

        4)关闭相关的流对象

                br.close();//后开的流先关

                fr.close();//先开的流后关

(2) 使用字符流类BufferedWrite和FileWrite写文本文件

        BufferedWrite和FileWrite都是字符输出流Write抽象类的子类,它们可以通过字符流的方式并通过缓冲区把数据写入文本文件,提高了写文本文件的效率。把数据写入文本文件的具体操作步骤如下:

        1)导入相关的类

                import java.io.FileWriter;

                import java.io.BufferedWriter;

                import java.io.IOException;

        2)构造一个BufferedWriter对象

                FileWriter fw = new FileWriter("mytest.txt");

                BufferedWriter bw = new BufferedWriter(fw);

        3)利用BufferedWriter类的方法读取文本文件中的数据

                br.write("hello");//读取一行数据,返回字符串

        4)相关流对象的清空和关闭

                bw.flush();

                bw.close();//后开的流先关

                fw.close();//先开的流后关

读写二进制文件

读写二进制文件常用的类有DataInputStream和DataOutputStream。

1、 使用字节流读二进制文件

        利用DataInputStream类读二进制文件,其实与利用FileInputStream类读文本文件及其相似,也要用到FileInputStream类关联二进制文件。具体操作步骤如下:

        1)导入相关的类

                import java.io.FileInputStream;

                import java.io.DataInputStream;

                import java.io.IOException;

        2)构造一个数据输入流对象

                FileInputStream fis = new FileInputStream("HelloWorld.class");

                DataInputStream dis = new DataInputStream(fis);

        3)利用数据输入流类的方法读取二进制文件中的数据

                dis.readInt();//读取出来的是整数

                dis.readByte();//读取出来的数据是Byte

        4)关闭数据输入流

                dis.close();//后开的流先关

                fis.close();//先开的流后关

2、 使用字节流写二进制文件

        利用DataOutputStream类写二进制文件,其实与利用FileOutputStream类写文本文件及其相似,也要用到FileOutputStream类关联二进制文件。具体操作步骤如下:

        1)导入相关的类

                import java.io.FileOutputStream;

                import java.io.DataOutputStream;

                import java.io.IOException;

        2)构造一个数据输出流对象

                FileOutputStream fos = new FileOutputStream("temp.class");

                DataOutputStream dos = new DataOutputStream(fos);

        3)利用数据输出流类的方法把数据写入二进制文件

                dos.write(1); //把数据写入二进制文件

        4)关闭数据输入流

                dos.close();//后开的流先关

                fos.close();//先开的流后关

相关文章:

  • 47 vue 常见的几种模型视图不同步的问题
  • uniapp实现列表动态添加
  • Git Fork后的仓库内容和原仓库保持一致
  • 小狐狸JSON-RPC:钱包连接,断开连接,监听地址改变
  • 算法---动态规划练习-6(地下城游戏)
  • 大话设计模式之简单工厂模式
  • 流计算之Flink
  • 关于Vue中npm install出现报错及解决方法
  • 正则表达式中的特殊字符
  • 【网络安全】网络安全意识教育实用指南
  • 黑马程序员——接口测试——day03——Postman断言、关联、参数化
  • 【管理咨询宝藏资料28】某信息技术有限公司战略规划报告
  • STM32F103移植FreeRTOS必须搞明白的系列知识---4(FreeRTOSConfig.h配置文件)
  • C语言中的字符串转数字函数常见问题详解
  • 从零开始搭建仿抖音短视频APP-构建后端项目
  • 力扣 221. 最大正方形
  • 爬虫报错:twisted.web._newclient.ResponseNeverReceived
  • 前后端分离技术渲染动态页面 - 表白墙(Servlet)
  • 关于springboot多环境设设置说明
  • 一幅长文细学CSS3
  • P2-Net:用于2D像素与3D点匹配的局部特征的联合描述符和检测器(ICCV 2021)
  • 电磁兼容(EMC)基础(二)
  • 面向终客户和设备制造商的Ethernet-APL
  • React.lazy与Suspence实现延迟加载
  • React 中 memo useMemo useCallback 到底该怎么用
  • git命令
  • Vue的思维导图
  • 【Linux】4.0进程控制
  • 【Python应用】自制截图取词小工具-- 解锁文字识别新姿势
  • MYSQL学习笔记(DDL[数据定义]、DML[数据操作]、DQL[数据查询])
  • SpringCloud学习笔记
  • FFT 快速傅里叶变换 NTT 快速数论变换