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

Java第十一天(实训学习整理资料(十)Java IO流)

目录

一、说明

二、Java中的IO操作分类

三、字符流

1、Writer

2、FileWriter

3、Reader

四、字节流

1、主要的类

2、FileOutputStream 文件字节输出流

3、FileInputStream 文件字节输入流

五、装饰器

1、BufferedInputStream

2、BufferedOutputStream

3、BufferedReader

4、BufferedWriter

六、系统流


一、说明

        I: Input 输入 ​

        O: Output 输出

输入和输出的方向:

        输入(Input): 从其他的资源读取数据到java程序。

        输出(Output):从java程序写出数据到其他资源载体。

二、Java中的IO操作分类

1、以字符作为最小单位进行操作,本质仍然是字节流(字符流)

2、以字节作为最小单位操作(字节流)

java中io操作的接口:

                                输入                 输出

字节流         - InputStream         - OutputStream

字符流         - Reader                 - Writer

三、字符流

1、Writer

        Writer是字符输出流:

                Writer是一个抽象类,不能直接使用,需要通过它的已知实现类操作

                操作的是文件 - Writer - OutputStreamWriter - FileWriter

2、FileWriter

构造方法:

        FileWriter(File file)

        FileWriter(File file, boolean append)

        FileWriter(String fileName)

        FileWriter(String fileName, boolean append)

说明:

        append 表示是否打开追加模式,

        true 表示将当前内容追加到原文件的末尾

        false 表示用当前内容重写原文件

常用方法:

        void write(int c);

        void write(char[] cbuf);

        void write(char[] cbuf, int off, int len);

        void write(String str);

        void write(String str, int off, int len);

说明:

        wite方法,不会立即将数据写入磁盘的文件中,而是先写入到缓冲区,目的是为了提高效率,当缓冲区满了后,数据会流入文件;如果不希望数据留在缓冲,则可以调用flush方法,立即刷新。

刷新缓冲区:

        void flush() //刷新缓冲区

关闭文件输出流:

        在关闭流时会自动调用flush方法

        void close()

3、Reader

Reader是字符输入流;

继承关系:Reader - InputStreamReader - FileReader

构造方法:

        FileReader(File file) //接受一个File对象

        FileReader(String fileName)//接受一个文件的路径字符串

常用方法:

        read() //读取第一个字符

        read(char[] cbuf, int offset, int length)

        read(char[] cbuf)

        read(CharBuffer target)

关闭文件输入流:

        void close();

案例:读取文件内容

//构建文件输入流 FileReaderFileReader fileReader = new FileReader("D:" + PS + "test" + PS + "out.txt");char[] chars = new char[4];int readChars = 0;while ((readChars = fileReader.read(chars))!=-1){String str = new String(chars, 0, readChars);System.out.println(str);}fileReader.close();

练习:

1、利用File实现递归删除,写死。

2、统计工作空间下Java文件,并输出代码行数

3、复制文件

四、字节流

1、主要的类

        InputStream

        OutputStream

字符流的底层也是基于字节流实现,字节流比较通用。

2、FileOutputStream 文件字节输出流

构造方法:

        FileOutputStream(String name, boolean append)

        FileOutputStream(File file, boolean append)

常用方法:

        write(byte b[])

案例代码:

//定义文件路径String path = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro.log";FileOutputStream fileOutputStream = null;try {//打开文件fileOutputStream = new FileOutputStream(path);//操作文件String content = "hello java,欢迎使用idea!";fileOutputStream.write(content.getBytes("UTF-8"));//fileOutputStream.flush();} catch (Exception e) {e.printStackTrace();} finally {//关闭文件if(fileOutputStream != null) {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();} finally {fileOutputStream = null;}}}
3、FileInputStream 文件字节输入流

构造方法:

        FileInputStream(File file)

        FileInputStream(String name)

常用方法:

        int read()

        int read(byte[] b)

案例代码:

//定义文件路径String path = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro.log";String path1 = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro-out.log";//构建字节输入流FileInputStream fileInputStream = null;//构建字节输出流FileOutputStream fileOutputStream = null;try {fileInputStream = new FileInputStream(path);fileOutputStream = new FileOutputStream(path1);//操作byte[] btns = new byte[2];//读取2个字节-》btnsint count = 0;//这种问题如何解决?while ((count = fileInputStream.read(btns)) != -1) {//将读取的文件数据写出到其他文件//fileOutputStream.write(btns, count);fileOutputStream.write(btns, 0, count);//控制台打印/*String result = new String(btns, "UTF-8");System.out.println(result);*/}} catch (Exception e) {e.printStackTrace();} finally {//先关输入还是先关输出?  --- 先关输入//关闭if(fileInputStream != null) {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();} finally {fileInputStream = null;}}if(fileOutputStream != null) {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();} finally {fileOutputStream = null;}}}

练习:通过字节输入和输出流实现将视频文件进行复制。

五、装饰器

        由于InputStream&OutputStream没有缓冲区,导致java程序需要直接与磁盘进行IO操作,

        增加了BufferedInputStream&BufferedOutputStream

1、BufferedInputStream

构造方法:

        BufferedInputStream(InputStream in)

        BufferedInputStream(InputStream in, int size)

主要方法:

        synchronized void flush()

2、BufferedOutputStream

构造方法:

        BufferedOutputStream(OutputStream out)

        BufferedOutputStream(OutputStream out, int size)

3、BufferedReader

        String readLine() //读取一行

4、BufferedWriter

        在字符的装饰类上扩展了标记功能

        //用于标记当前文件中的操作位置

        void mark(int readAheadLimit)

        //将文件操作指针重置到mark标记位

        void reset()

案例代码:

String path = "E:\\java72_projects\\java-api\\src\\cn\\day08\\files\\main.txt";//从文件中读取字符  file read
FileReader fileReader = new FileReader(path);
BufferedReader bufferedReader = new BufferedReader(fileReader);//char cha = (char)bufferedReader.read();System.out.println((char)bufferedReader.read());
bufferedReader.mark(10);
System.out.println((char)bufferedReader.read());
System.out.println((char)bufferedReader.read());
System.out.println((char)bufferedReader.read());
bufferedReader.reset();
System.out.println((char)bufferedReader.read());
System.out.println((char)bufferedReader.read());
System.out.println((char)bufferedReader.read());

        //执行结果: a,b,c,d,b,c,d

六、系统流

        System.err 标准错误输出流

        System.out 标准输出流

        System.in 标准输入流

        Scanner 扫描器

案例:

Scanner scanner = new Scanner(System.in);String str = scanner.nextLine();System.out.println(str);利用装饰器配合系统标准输入流实现扫描器功能:BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);System.out.println("请输入内容:");byte[] bt = new byte[255];int read = bufferedInputStream.read(bt, 0, bt.length);String str = new String(bt, 0, read, "utf-8");System.out.println("您接收的内容是:"+str);


http://www.mrgr.cn/news/67092.html

相关文章:

  • Hearts of Iron IV 之 Archive Modification
  • 速度了解云原生后端!!!
  • OpenCV基础05_GUI和PyMsql
  • 遥感图像数字处理 - 1
  • 【vim文本编辑器gcc编译器gdb调试器】
  • CSS中常见的两列布局、三列布局、百分比和多行多列布局!
  • Bridge(桥接)
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十七章 交叉编译QT工程
  • 架构评估的方法
  • 【PyTorch][chapter31][transformer-5] MQA,CQA, GQA
  • 7.2 设计模式
  • 零基础‘自外网到内网’渗透过程详细记录(cc123靶场)——下
  • java_继承
  • Oracle 第26章:Oracle Data Guard
  • 11.6 校内模拟赛总结
  • Halcon打开多个窗口,指定窗口显示指定内容
  • ISUP协议视频平台EasyCVR私有化视频平台录像机(Ehome或ISUP 5.0)不在线如何排查原因?
  • 【022A】基于51单片机音乐盒
  • python代码实现datax、sqoop功能,用spark将hive数据导入导出到mysql
  • 期权懂|期权卖方亏损无限盈利有限,如何破解亏损无限呢?
  • 高效率的快捷回复软件 —— 客服宝聊天助手
  • BootStrap复选框多选,页面初始化选中处理
  • 昇思大模型平台打卡体验活动:基于MindSpore实现GPT1影评分类
  • 系统在此应用程序中检测到基于堆栈的缓冲区溢出。溢出可能允许恶意用户获得此应用程序的控制。
  • 如何用 ChatPaper.ai 打造完美的 AI 课堂笔记系统
  • Halcon 矫正图像 图像矫正