当前位置: 首页 > 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.mrgr.cn/news/78013.html

相关文章:

  • CH595 驱动数码管
  • MySQL 的 INSERT(插入数据)详解
  • 电脑使用——知乎、钉钉组件访问失败解决
  • 对比 MyBatis 批处理 BATCH 模式与 INSERT INTO ... SELECT ... UNION ALL 进行批量插入
  • cryptography与zlib系列:数据压缩与解压
  • SpringCloud多机部署,负载均衡-LoadBalance
  • Java基础-组件及事件处理(下)
  • Java基础-Java中的常用类(上)
  • openssl创建自签名证书
  • Linux 正则表达式(basic and extened)
  • Linux笔记---进程:进程切换与O(1)调度算法
  • 懂微百择唯供应链RankingGoodsList2存在SQL注入漏洞
  • PIMPL模式和D指针
  • C语言:深入理解指针
  • MPI 直接传递 GPU buffer 数据的原理——调试 libmpi.so from MPI with-cuda
  • 《Spring 实战:小型项目开发初体验》
  • Loom篇之java虚拟线程那些事儿
  • ajax (一)
  • WordPress添加类似说说、微博的时间轴微语页面
  • URL在线编码解码- 加菲工具
  • GPT 中的核心部分 Transformer 和RNN 具体别和应用领域
  • ThingsBoard规则链节点:AWS SQS 节点详解
  • 图片预览 图片上传到服务器
  • ubuntu中使用ffmpeg和nginx推流rtmp视频
  • RFdiffusion sample_vec函数解读
  • PAL(Program-Aided Language Model)