当前位置:网站首页>InputStream和OutputStream流的使用
InputStream和OutputStream流的使用
2022-07-30 14:41:00 【华为云】
1.InputStream简介
java.io.InputStream是字节输入流的抽象类,表示字节输入流的所有类的顶层父类。用来将文件中的数据读取到java程序中。如果需要使用输入流的时候,必须创建他的子类进行使用。在读取文件的时候我们常常使用InputStream抽象类的子类FileInputStream文件字节输入流来进行文件中的数据读取,将磁盘中的文件转化为流的形式,读取到内存中来进行使用。
2.FileInputStream的使用
FileInputStream的构造方法有:FileInputStream(File file)参数是传递一个File类型的文件; FileInputStream(String name)参数是传递一个String类型的文件路径。
常用的方法有:
int read()是从文件中读取一个字节数的数据,并返回读取到的这个字节, 如果读取结束,则返回-1;
int read(byte[] b)是一次读取一个字节数组,输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束,则返回-1;
void close()是关闭流,如果不关闭流会造成内存溢出等情况,所以在使用结束后,需要手动调用关闭流的方法进行关闭。
3.FileInputStream读取文件
3.1 创建一个FileInputStream流对象,并指定需要读取的数据源文件,此时如果指定的数据源的文件不存在,则会抛出File not fount excep异常。
3.2 调用read()方法进行数据的读取。
3.3 把读取到的这个字节赋值给变量i,判断i是否不等于-1,如果不是-1表示没有读完,还在读,本次读取到了内容,就会继续再循环中对读取到的内容进行处理。
3.4 调用close()方法关闭流进行资源的释放。
第一种,一个字节一个字节的读取,这种方法不能读取中文,因为一个中文占多个字节,此时一次读取一个字节会把中文拆开读。
public class Test { public static void main(String[] args) throws IOException { FileInputStream stream = new FileInputStream("F:\\demo123\\test\\test.txt"); int i = 0; while ((i = stream.read()) != -1) { System.out.print((char) i); } stream.close(); }}第二种,使用字节输入流一次读取一个字节数组,输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束返回-1,这种会比上一种读取方式效率高很多。
public class Test1 { public static void main(String[] args) throws IOException { FileInputStream stream = new FileInputStream("F:\\test123\\test\\test.txt"); byte arr[]=new byte[1024]; int len = 0;//返回读取到的个数 //使用循环开始读取 while((len=stream.read(arr))!=-1){ System.out.println(new String(arr,0,len)); } stream.close(); }}4.FileOutputStream输出流进行文件复制
FileOutputStream文件复制的流程是一边读,一边写,每读取一次就把读取到的内容写到文件中。和上面的一次读取一个字节数组的方式一样,也是采用这种方式进行复制的。
4.1 创建一个FileInputStream流对象,并指定需要读取的数据源文件,此时如果指定的数据源的文件不存在,则会抛出File not fount excep异常。
4.2 创建字节输出流对象用来写入,如果没有会进行自动创建。
4.3 创建一个数组用来读取
4.4 从文件中用字节数组读取数组,存储到字节数组中,每读取到一个内容,就把读取到的内容写入到目的地文件
public class Test2 { public static void main(String[] args) throws IOException { FileInputStream in= new FileInputStream("F:\\test123\\test\\test.txt"); FileOutputStream out = new FileOutputStream("F:\\test123\\test\\test1.txt"); byte arr[] = new byte[1024]; int len = 0; while ((len = in.read(arr)) != -1) { fs.write(arr,0,len); } in.close(); out.close(); }}以上就是InputStream和FileOutputStream的简单使用方法总结。
边栏推荐
- 952. 按公因数计算最大组件大小 : 枚举质因数 + 并查集运用题
- 容器排序案例
- JUC常见的线程池源码学习 02 ( ThreadPoolExecutor 线程池 )
- 使用 protobuf 进行数据序列化
- MongoDB启动报错 Process: 29784 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=14)
- A Small Case About Containers
- 智能合约安全——私有数据访问
- 惊艳!京东T8纯手码的Redis核心原理手册,基础与源码齐下
- [Enlightenment by Opportunity-53]: "Sushu"-3- Self-cultivation and Self-cultivation
- JUC common thread pool source learning 02 ( ThreadPoolExecutor thread pool )
猜你喜欢
随机推荐
5. DOM
极验深知v2分析
5G-based Warehousing Informatization Solution 2022
瑞吉外卖项目实战Day02
ESP32 Repeated Reboot Issue Arduino Shield Power Outage Detector
MPSK抗噪声性能对比(即MPSK标准误码率曲线)
机房布线的至高境界,美到窒息
Redis cache penetration, breakdown, avalanche and consistency issues
4位资深专家多年大厂经验分享出Flink技术内幕架构设计与实现原理
Application of time series database in the field of ship risk management
Container sorting case
Understand the Chisel language. 29. Chisel advanced communication state machine (1) - communication state machine: take the flash as an example
JSON常用注解
学习 MySQL 需要知道的 28 个小技巧
【元胞自动机】基于元胞自动机模拟生命演化、病毒感染等实例附matlab代码
国内数字藏品的乱象与未来
第十一章 api mgmnt API 参考
去腾讯面试,直接让人出门左拐 :幂等性都不知道!
v-model组件化编程应用
A simple change for problem, knapsack problem sets of shell









