Java_IO流(精讲)包含练习题及答案——建议收藏

包含常用的所有属性与函数的示例,并且对【字符流】【字节流】分别做的【读写】操作示例。

目录

1、Java Io流的概念

按照流的流向分,可以分为输入流和输出流。

按照操作单元划分,可以划分为字节流和字符流。

IO流常用到的五个类和一个接口

2、File

文件操作常用属性与函数(读取类):

文件操作常用属性与函数(操作类):

​练习题:

获取E盘下所有文件名是示例:

3、字符流的文件读取

单个读取:

循环读取:

4、字符流写入

写入测试:

练习题:

5、字符流复制文件

练习题:

6、字节流的概念

练习题:


1、Java Io流的概念

流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象。

流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

作用:为数据源和目的地建立一个输送通道

Java IO所采用的模型 Java的IO模型设计非常优秀,它使用Decorator[ˈdekəreɪtə(r)](装饰者)模式,按功能划分Stream[striːm]英[striːm]美,您可以动态装配这些Stream,以便获得您需要的功能。

例如,您需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream(字符流)和BufferedInputStream(字节流)。

按照流的流向分,可以分为输入流和输出流。

  • 输入流: 只能从中读取数据,而不能向其写入数据。
  • 输出流:只能向其写入数据,而不能向其读取数据。

按照操作单元划分,可以划分为字节流和字符流。

字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。

IO流常用到的五个类和一个接口

在整个Java.io包中最重要的就是5个类和一个接口。

5个类指的是File、OutputStream、InputStream、Writer、Reader;

一个接口指的是Serializable(序列化)。掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了。

2、File文件操作

File是一个标准的文件类 File类对象对应于文件系统中的一个目录或文件 File类对象描述文件路径、名字、长度、可否读写等属性,可用来命名 文件、查询文件属性或处理目录,但不能读写文件。

文件操作常用属性与函数(读取类):

file.separator;//为系统的目录符号/或\
pathSeparator;//为系统的分隔符;
exists();//判断是否存在这个文件
isFile();//判断是文件
isDirectory();//判断是目录
getName();//文件名
getPath();//整个路径名/相对路径名
length();//文件长度(大小)
canRead();//文件读的属性
canWrite();//文件写的属性
getAbsolutePath();//获得文件路径,如果是相对路径根据项目路径补充完整
lastModified();//最后一次修改时间

测试编码:

package IO_test;import java.io.File;/*** @author laoshifu* @date 2021年11月28日*/
public class Action {public static void main(String[] args) {File file=new File("E:/");System.out.println(file.separator);//为系统的目录符号/或\System.out.println(file.pathSeparator);//为系统的分隔符;System.out.println(file.exists());//判断是否存在这个文件System.out.println(file.isFile());//判断是文件System.out.println(file.isDirectory());//判断是目录System.out.println(file.getName());//文件名System.out.println(file.getPath());//整个路径名/相对路径名System.out.println(file.length());//文件长度(大小)System.out.println(file.canRead());//文件读的属性System.out.println(file.canWrite());//是否可写//获得文件路径,如果是相对路径根据项目路径补充完整System.out.println(file.getAbsolutePath());System.out.println(file.lastModified());//最后一次修改时间System.out.println(file.getPath());//整个路径名/相对路径名}
}

效果:

文件操作常用属性与函数(操作类):

renameTo(new File);重命名
delete();删除目录
mkdir();创建目录
mkdirs();创建多层目录
createNewFile();创建新文件

测试编码:

package IO_test;import java.io.File;
import java.io.IOException;/*** @author laoshifu* @date 2021年11月28日*/
public class Action {public static void main(String[] args) {//重命名File file=new File("E:/test/demo.txt");file.renameTo(new File("E:/test/demo1.txt"));//创建单层目录File fileMk=new File("E:/test/demo");fileMk.mkdir();//创建多层目录File fileMks=new File("E:/test/demo/a/b/c/d/e/f/g");fileMks.mkdirs();//删除目录File delDir=new File("E:/test/demo/a/b/c/d/e/f/g");delDir.delete();//创建文件File fileCreate=new File("E:/test/demo/file.txt");try {fileCreate.createNewFile();} catch (IOException e) {e.printStackTrace();}}
}

效果:

练习题:

1、字符流处理数据的基本单位是( A )。A、2字节                   B、1字节C、1024字节               D、1024B2、现有一篇中文的文章为.txt文件,我们应该使用哪种流操作( B ),因为( D )。A、字节流        B、字符流C、字节流每次都读取一个字节,任何文件都能操作         D、由于是中文,一个中文占2个字符,用字节流去读会出现乱码,所以采用字符流。每次去读2个字符,不会出现编码错误。3、file.getPath()与file.getAbsolutePath()的说法正确的是(多选)( BD )。
A、getPath一定返回文件的绝对位置
B、getAbsolutePath一定返回文件的绝对位置
C、默认相对路径返回结果相同
D、默认绝对路径返回结果相同

获取E盘下所有文件名是示例:

//需要的包
import java.io.File;
import java.util.Arrays;
//编码
File f = new File("E:/");
String []s = f.list();
System.out.println(Arrays.toString(s));
//获得E盘下面所有文件的路径:
File [] files = f.listFiles();
System.out.println(Arrays.toString(files));
//获取系统盘符
File [] files1 = File.listRoots();
System.out.println(Arrays.toString(files1));

3、字符流的文件读取

为什么用字符流读取文本文件:

1、由于每个中文占用空间为2字节,故而使用字节流读取会产生乱码

2、每个中文占2字节,与char大小相同,所有的中文均与某个char值相对应

纯文本的读取,步骤:

1.建立联系 file对象

2.选择流: Reader FileReader

3.读取:char[] flush=new char[1024];//或逐一读取

4.关闭资源 fr.close()

字节流读取文件VS字符流读取纯文本

1.使用流不同,前者使用“stream”后者是“reader”

2.读取使用数组不同,前者是byte数组,后者是char数组

3.速度不同,后者速度要比前者快

单个读取:

编码示例:

package IO_test;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;/*** @author laoshifu* @date 2021年11月28日*/
public class Action {public static void main(String[] args) {FileReader fr = null;try {fr = new FileReader(new File("E:/test/demo1.txt"));int read=fr.read();System.out.println((char)read);} catch (IOException e) {e.printStackTrace();}}
}

效果:

循环读取:

编码示例:

package IO_test;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;/*** @author laoshifu* @date 2021年11月28日*/
public class Action {public static void main(String[] args) {FileReader fr = null;try {fr = new FileReader(new File("E:/test/demo1.txt"));while (true) {int read = fr.read();if (read == -1) {break;}System.out.print((char) read);}} catch (IOException e) {e.printStackTrace();}}
}

执行效果:

4、字符流写入

写入测试:

编码示例:

package IO_test;import java.io.*;/*** @author laoshifu* @date 2021年11月28日*/
public class Action {public static void main(String[] args) throws IOException {FileWriter fw= null;try {fw = new FileWriter(new File("E:/test/demo1.txt"));fw.write("I HAVE A GOOD IDEA!");} catch (IOException e) {e.printStackTrace();}finally {fw.flush();//刷新,写完必须刷一下fw.close();}
//每次可以写入一个字符串,
//统一写完之后需要刷新将数据写入到对应文件,并清空缓存区
//读完要关闭,fw.close();一般在finally中写}
}

练习题:

1、FileReader fr读取的是一个文件还是一个字符串( A )。A、文件                 B、字符串2、字符流的FileWriter在write某个字符串之后一定要执行哪个函数才能将数据写进对应的文件( B )。A、writed()     B、flush()C、wait()           D、closes()3、FileWriter中flush函数的作用是( B )。A、刷新缓冲区的数据                  B、清空缓冲区并完成文件写入操作C、关闭写入流                     D、重新开启缓冲区

5、字符流复制文件

将某文件夹下的文件单独复制一份,并在同一个文件夹内重新修改名称后粘贴一份。

1、读取源文件。

2、通过FileReader逐一读取。

3、通过FileWriter将逐一读取的字符流写入到预先给予的位置上。

4、关闭写入流、关闭读取流。

编码示例:

package IO_test;import java.io.*;/*** @author laoshifu* @date 2021年11月28日*/
public class Action {public static void main(String[] args) throws IOException {FileReader fr = new FileReader(new File("E:/test/demo1.txt"));FileWriter fw = new FileWriter(new File("E:/test/demo2.txt"));int i = 0;char[] geshu = new char[10];while (true) {i = fr.read(geshu);if (i == -1) {break;}fw.write(geshu, 0, i);fw.write(i);}fw.flush();//里面慢,外面快}
}

效果如下:

练习题:

1、使用Java IO流实现对文本文件的读写过程中,需要处理下列(  B  )异常。A、ClassNotFoundException                  B、IOExceptionC、SQLException                             D、RemoteException2、在Java的IO操作中,(  D  )方法可以用来刷新流的缓冲。A、void release()        B、void close()C、void remove()           D、void flush()3、下列对于FileReader fr=new FileReader("url.txt")方法的返回值正确的(  B  )。A、String str=fr.read();B、int str=fr.read();C、byte str=fr.read();D、char str=fr.read();

6、字节流的概念

IO:数据从硬盘流向内存(Input),或者从内存流向硬盘(Output)。

字节流——传输过程中,传输数据的最基本单位是字节的流。

按操作数据单元分:

字节流、字符流

|-字节流:8位

|-字符流:16位

可以操作所有文件,包括文本文件、视频、音频、压缩文件等等都可以用字节流读写。

字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Writer

编码示例:

这里采用【sql】与【MP4】文件进行操作,并且操作成功,无乱码出现。

【sql】文件复制:

package IO_test;import java.io.*;/*** @author laoshifu* @date 2021年11月28日*/
public class Action {public static void main(String[] args) throws IOException {FileInputStream fis = null;FileOutputStream fos = null;try {//将文件复制一份到同一文件夹下,并更换名称fis = new FileInputStream(new File("E:\\test\\DoodDB.sql"));fos = new FileOutputStream(new File("E:\\test\\DoodDB1.sql"));byte[] buf = new byte[1024];//每次读取1024的字节(1024b)while (true) {int i = fis.read(buf);if (i == -1) {break;}//当读取不到时,结束循环fos.write(buf, 0, i);//每次将读取的1024b存储到写入的缓冲区}        fos.flush();//清空缓冲区,将内容写到新文件内fos.close();fis.close();//关闭读取写入流}catch (Exception e) {         e.printStackTrace();        }}
}

效果:

【MP4】文件复制

package IO_test;import java.io.*;/*** @author laoshifu* @date 2021年11月28日*/
public class Action {public static void main(String[] args) throws IOException {long start=System.currentTimeMillis();FileInputStream fis = null;FileOutputStream fos = null;try {//将文件复制一份到同一文件夹下,并更换名称fis = new FileInputStream(new File("E:\\test\\2020info.mp4"));System.out.println("文件大小:"+fis.available());fos = new FileOutputStream(new File("E:\\test\\2020info_copy.mp4"));byte[] buf = new byte[1024];//每次读取1024的字节(1024b)while (true) {int i = fis.read(buf);if (i == -1) {break;}//当读取不到时,结束循环fos.write(buf, 0, i);//每次将读取的1024b存储到写入的缓冲区}      fos.flush();//清空缓冲区,将内容写到新文件内fos.close();fis.close();//关闭读取写入流}catch (Exception e) {         e.printStackTrace();        }long end=System.currentTimeMillis();System.out.println("消耗:"+(end-start)+"毫秒");}
}

效果如下:

可看到文件效果:

练习题:

1、数据从硬盘流向内存( A ),或者从内存流向硬盘( D )。A、Input                   B、ReadC、Write                   D、Output2、字节流不善于操作的文件是( B )。A、图片        B、中文文本      C、视频        D、音乐3、下列函数那些不是FileOutputStream的write函数的重载方法 ( D )。A、write(byte[]b)                              B、write(int b)C、write(byte[]b,int off,int len)          D、write(byte b,int len)

以上为【Java_IO】的常用所有内容,希望能对大家有所帮助,但是有一些【服务器】容易出现的异常,由于复现麻烦,故而并未汇总。

例如:【IO流文件的相对路径及获取系统路径方法_红目香薰-CSDN博客】

希望能大家有所帮助,可以收藏,价值较高。

Java_IO流(精讲)包含练习题及答案相关推荐

  1. C++ Primer Plus 学习记录(第五章节-包含练习题答案)

    C++ Primer Plus 学习记录(第五章节-包含练习题答案) 5.1 for循环 5.1.1 for循环的组成部分 1.for循环的组成部分所完成的步骤 2.赋值表达式有值 3.cout中显示 ...

  2. DayDayUp:大学英语六级考试历年真题答案规律分析、应试回答精讲、及六级改革历史之详细攻略

    DayDayUp:大学英语六级考试历年真题答案规律分析.应试回答精讲及六级改革历史之详细攻略 目录 大学英语六级考试历年真题规律分析 1.英六试题结构 2.英语六级改革历史

  3. java流式上传下载_精讲RestTemplate第6篇-文件上传下载与大文件流式下载

    C++Templates(第2版英文版) 123.24元 (需用券) 去购买 > 本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在S ...

  4. Oracle数据库练习题及答案大全(包含数据库脚本)

    目录 删表语句 建表语句 插入数据 练习题及答案 整理不易,请仔细阅读,希望对你有帮助 可自行复制粘贴,仅供参考,如有问题请及时私信或评论,我会一一回复 删表语句 drop TABLE STUDENT ...

  5. struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法

    笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...

  6. mvp的全称_是让人提神醒脑的 MVP、MVVM 关系精讲!

    前言 很高兴见到你! 我是<Jetpack MVVM 精讲>的独立原创作者 KunMinX,GitHub star 8.7k,专注于深度思考和 Jetpack MVVM 的分享. 关于 M ...

  7. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  8. [读书笔记] 《修炼之道:.NET 开发要点精讲》

    <修炼之道:.NET 开发要点精讲> 目录 <修炼之道:.NET 开发要点精讲> 第 1 章 另辟蹊径:解读.NET 1.7 本章思考 > 位置 465 第 2 章 高屋 ...

  9. MySQL精讲(一) |DQL数据查询语句全解析

    MySQL精讲系列文章(更新完毕) <MySQL入门必看知识> <MySQL精讲(一) | DQL数据查询语句全解析> <MySQL精讲(二) | DML数据操作语句全解 ...

最新文章

  1. 项目管理ppt_「PPT」几近满分的项目管理PPT干货
  2. php安装redis扩展模块
  3. 分析模式:可复用的对象模型学习笔记
  4. [Swift]LeetCode206. 反转链表 | Reverse Linked List
  5. ML之FE:数据处理—特征工程之稀疏特征的简介、如何处理、案例应用之详细攻略
  6. ransac剔除误匹配matlab代码,基于APAP图像拼接算法的改进
  7. Rightmost Digit
  8. what is the meaning of bring you up to speed?
  9. java中值传递和引用传递
  10. 玩转oracle 11g(32):plsql版本低需到配置文件中添加配置
  11. linux iptables找不到,centos /etc/sysconfig/下找不到iptables文件解决方法
  12. TCP/IP笔记-ARP协议包结构相关笔记
  13. 企业会计准则2020版pdf_2020年下半年CATTI三级笔译中译英真题+参考答案+原文件汉英对照PDF版...
  14. springboot中使用websocket_在 Spring Boot 项目中使用 activiti
  15. 将Web应用性能提高十倍的10条建议
  16. 豆瓣评分9.0,时隔6年,“Linux命令行圣经”新版终于来了!
  17. js对象定义的3种方法
  18. 聊聊面试培训机构学员的感受
  19. esp32 红外接收
  20. MATLAB:gca、gcf、gco区别

热门文章

  1. intro to cs with python_CS 105 – Intro to Computing Non-Tech Spring 2019
  2. linux怎么装mac系统,Linux/macos系统怎么安装nvm
  3. 不显示坐标刻度_如何使用坐标交叉位置来改变Excel图表的展现形态
  4. java string封装类_java中八种基本数据类型以及它们的封装类,String类型的一些理解...
  5. 【工作分解法】IT人,你的工作“轻松”么?
  6. 回溯法解决01背包问题
  7. java并发编程之美-阅读记录5
  8. 前端项目课程5 登录界面如何做
  9. vscode去除控制台ES6报错
  10. BLE通信过程中,一次连接间隔最多可以发多少包,BLE的最大通信速度为多少