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

Java基础-I/O流

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

字节流

定义

说明

InputStream与OutputStream示意图

说明

InputStream的常用方法

说明

OutputStream的常用方法 

说明

InputStream与OutputStream的继承体系

字节流读写文件 

说明

文件的拷贝


字节流

定义

在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,I/O流中针对字节的输入/输出提供了一系列的流,统称为字节流。

说明

字节流是程序中最常用的流。
在JDK中,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。

InputStream与OutputStream示意图

说明

InputStream被看成一个输入管道,OutputStream被看成一个输出管道,
数据通过InputStream从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。 

InputStream的常用方法

说明

前三个read()方法都是用来读数据的,分按字节读取和按字节数组读取。
进行I/O流操作时,应该调用close()方法关闭流,从而释放当前I/O流所占的系统资源。

OutputStream的常用方法 

说明

前三个write()方法都是用来写数据的,分按字节读取和按字节数组写入。
flush()方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。
close()方法是用来关闭流并释放与当前IO流相关的系统资源。

InputStream与OutputStream的继承体系

字节流读写文件 

说明

针对文件的读写操作,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream。
FileInputStream是InputStream的子类,它是操作文件的字节输入流,专门用于读取文件中的数据。
从文件读取数据是重复的操作,因此需要通过循环语句来实现数据的持续读取

示例(读取包含“hello”内容的txt文件)

FileInputStream in = new FileInputStream("test.txt");
int b = 0;
while((b=in.read()) != -1){System.out.println(b); 
}
in.close();

注意: 

在读取文件数据时,必须保证文件在相应目录存在并且是可读的,否则会抛出
FileNotFoundException。

示例(向txt文件写入数据)

FileOutputStream out = new FileOutputStream("out.txt");
String str = "hello";
out.write(str.getBytes());
out.close();

注意:通过FileOutputStream向一个已经存在的文件中写入数据,该文件中的数据首先会被清空,再写入新的数据。若希望在已存在的文件内容之后追加新内容,则可使用构造函数FileOutputStream(String fileName, boolean append)来创建文件输出流对象,并把append参数的值设置为true。

FileOutputStream out = new FileOutputStream("out.txt",true);
String str = " world";
out.write(str.getBytes());
out.close();

注意:I/O流在进行数据读写操作时会出现异常,为了保证I/O流的close()方法一定执行来释放占用的系统资源,通常会将关闭流的操作写在finally代码块中。 

finally{try{if(in!=null) in.close();}catch(Exception e){e.printStackTrace();}try{if(out!=null) out.close();}catch(Exception e){e.printStackTrace();}
}

文件的拷贝

说明

l/O流通常都是成对出现的,即输入流和输出流一起使用。例如文件的拷贝就需要通过输入流来读取源文件中的数据,并通过输出流将数据写入新文件。

FilelnputStream in new FilelnputStream("source/src.jpg");
FileOutputStream out new FileOutputStream("target/dest.jpg"):
int len =0;
long beginTime System.currentTimeMillis():
while ((len = in.read() !=-1){out.write(len);
}
long endTime System.currentTimeMillis();
System.out.println("花费时间为:"+(endTime-be gin Time)+"毫秒")
in.close();
out.close();

说明:上述示例在拷贝过程中,通过whil循环将字节逐个进行拷贝。在拷贝文件时,由于计算机性能等各方面原因,会导致拷贝文件所消耗的时间不确定,因此每次运行程序的结果并不一定相同。

http://www.lryc.cn/news/491150.html

相关文章:

  • 全面解析多种mfc140u.dll丢失的解决方法,五种方法详细解决
  • 详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案
  • InfluxDB时序数据库笔记(一)
  • Spring Boot 3.x + OAuth 2.0:构建认证授权服务与资源服务器
  • 2024年09月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析
  • Linux 正则表达式(basic and extened)
  • GB 35114-2017 学习笔记(规避版权阉割版)
  • YOLO-FaceV2: A Scale and Occlusion Aware Face Detector
  • 进程间通信--详解
  • 零基础上手WebGIS+智慧校园实例(1)【html by js】
  • 【Github】如何使用Git将本地项目上传到Github
  • 集合Queue、Deque、LinkedList、ArrayDeque、PriorityQueue详解
  • 谈一下开源生态对 AI人工智能大模型的促进作用
  • 基于python的机器学习(四)—— 聚类(一)
  • 实时数据开发 | 怎么通俗理解Flink容错机制,提到的checkpoint、barrier、Savepoint、sink都是什么
  • C++设计模式-策略模式-StrategyMethod
  • 小程序免备案:快速部署与优化的全攻略
  • Jmeter中的定时器
  • C++自动化测试:GTest 与 GitLab CI/CD 的完美融合
  • vscode连接远程开发机报错
  • 神经网络12-Time-Series Transformer (TST)模型
  • IDEA 2024安装指南(含安装包以及使用说明 cannot collect jvm options 问题 四)
  • Fakelocation Server服务器/专业版 Centos7
  • oracle的静态注册和动态注册
  • 机器翻译基础与模型 之四:模型训练
  • Vue——响应式数据,v-on,v-bind,v-if,v-for(内含项目实战)
  • ceph 18.2.4二次开发,docker镜像制作
  • 产品经理的项目管理课
  • Linux 下的 AWK 命令详细指南与示例
  • FPGA经验谈系列文章——8、复位的设计