图文详解Java中的字节输入与输出流
作者:深浅Java 发布时间:2022-12-23 23:14:48
目录
字节输入流
字节输入流结构图
FileInputStream类
构造方法:
常用读取方法:
字节输出流
字节输出流结构图:
FileOutputStream类
构造方法:
常用写入方法:
总结
字节输入流
java.io.InputStream抽象类是所有字节输入流的超类,将数据从文件中读取出来。
字节输入流结构图
在Java中针对文件的读写操作有一些流,其中介绍最常见的字节输入流。
FileInputStream类
FileInputStream流被称为字节输入流,对文件以字节的形式读取操作,例如文字,图片等。
构造方法:
FileInputStream(File file) ;通过File文件对象创建
FileInputStream(String name) ;通过一个文件路径字符串创建
常用读取方法:
read() 方法,从文件的第一个字节开始读取,每执行一次就读取一个字节,如果文件为空,则读取返回-1,挨个字节读取对于中文字符会出现乱码。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class dome2{
public static void main(String[] args){
File file=new File("D:/.../...txt"); //创建file对象
FileInputStream fi=null;
try {
fi=new FileInputStream(file); //创建字节输入流
int read;
while((read=fi.read())!=-1) { //数据不为空的情况下循环读取
System.out.print((char)read); //将读取的数据打印
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(fi!=null) {
try {
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
read(byte[] b) ,从此输入流中读取b.length个字节的数据读入到byte数组中,针对中文字符读取产生乱码,需要编码,如果记事本存储的汉字是什么格式的就在读取的时候改成什么格式,例如我现在记事本的编码格式是ANSI,在读取的时候就是按照ANSI或者gbk编码格式读取。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class dome2{
public static void main(String[] args){
File file=new File("D:/../...txt"); //创建file对象
FileInputStream fi=null;
try {
fi=new FileInputStream(file); //创建字节输入流
int read;
byte[] bytes=new byte[1024]; //创建一个数组,讲读取的字节存入数组
while((read=fi.read(bytes))!=-1) { //数据不为空的情况下循环读取
System.out.print(new String(bytes,0,read,"gbk")); //将读取的数据按字符串打印
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(fi!=null) {
try {
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
方法名 | 说明 |
---|---|
void close() | 关闭此文件输入流并释放关于此流有关的所有系统资源 |
int read(byte[] b, int off, int len) | 从此输入流中将len个字节的数据读入到byte数组中 |
int available() | 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。 |
long skip(long n) | 从输入流中跳过并丢弃 n 个字节的数据。 |
字节输出流
java.io.OutputStream抽象类是所有字节输出流的超类,该类用于对文件写入数据。
字节输出流结构图:
FileOutputStream类
FileOutputStream类是向文件中以字节的形式写入数据,例如图像和图片等。
构造方法:
FileOutputStream(File file);通过一个file对象表示的文件创建一个字节输出流。
FileOutputStream(File file, boolean append);通过一个file对象表示的文件创建一个字节输出流,append表示追加,true代表往后追加,false则要全部覆盖,文件里只存留刚写入的数据。
FileOutputStream(String name);通过一个指定路径名字符串创建一个字节输出流对象。
FileOutputStream(String name, boolean append);通过一个指定路径字符串创建一个字节输出流对象,append同上。
常用写入方法:
write(byte[] b); 将b.length个字节从指定的byte数组中写入到此输出流中。
write(byte[] b, int off, int len); 将指定的byte数组从偏移量off开始到len个字节写入到此输出流中。
write(int b); 将指定字节写入到此输出流中。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class dome2{
public static void main(String[] args){
File file=new File("D:/hello.txt"); //创建file对象
FileOutputStream fo=null;
try {
fo=new FileOutputStream(file);
String str="你好,java!";
byte[] bytes=str.getBytes();
fo.write(bytes);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(fo!=null) {
try {
fo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
来源:https://blog.csdn.net/m0_46813809/article/details/119895747


猜你喜欢
- 1. 可空类型修饰符 ?// 引用类型能用空引用来表示一个不存在的值,但是值类型不能。例如:string str = null;int i
- 这篇文章是博主在通过学习Android Studio的同时,实现service项目中用于背景音乐的实现,邮件的发送用于随堂小测的发送邮件功能
- 1 SQL语句的执行过程介绍MyBatis核心执行组件:2 SQL执行的入口分析2.1 为Mapper接口创建代理对象// 方式1:User
- IDEA单元测试报错:Class not found:xxxx springboot报错引入了新依赖,想着在测试模块进行测试。结果报错说Cl
- 数组排序在很多的面试题上都会出现数组排序的操作形式。但是这个时候你千万别写上:java.util.Arrays.sort(数组)。而这种排序
- Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全
- 前言使用maven创建的springboot项目,默认是jar包,springboot还有自己带的tomcat。现在需要将项目打包,并部署到
- 安装 小试记一次使用arthas排查jvm中CPU占用过高问题。这工具 * 爆了 碾压我目前使用的全部JVM工具。curl -O https:/
- 首先是“饿了么”导航Tab栏悬浮的效果图。大家可以看到上图中的“分类”、“排序”、“筛选”会悬浮在app的顶部,状态随着ScrollView
- 性能优化点:1.使用int不使用double。(单位用分不用元)也省去了还要用math.round四舍五入,把double类型数据只留小数点
- 同线程回收对象上一小节剖析了从recycler中获取一个对象, 这一小节分析在创建和回收是同线程的前提下, recycler是如何进行回收的
- 实例引入在家庭影院中,有灯光,屏幕,投影机,功放机,DVD 播放器这几个基本的工具:灯光,可以关闭灯光和打开灯光。投影机,可以打开和关闭投影
- kotlin基础教程之类和继承类声明使用class关键字声明类,查看其声明格式:: modifiers ("class"
- LottieLottie 是 Airbnb 开源的一个动画项目,它支持 iOS, mac OS Android RN,由于某些复杂动画的实现
- 在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型。向上转型我们在现实中常常这样说:这个人会唱歌。在这里,我们并不关心
- 序本文主要研究下在带有lombok(1.16.20版本)注解的代码在java10下的编译问题。问题Fatal error compiling
- spring容器是负责实例化、配置、组装组件的容器。容器的配置有很多,常用的是xml、Java注解和Java代码。在spring中Ioc容器
- 一、异步模型的基本概述异步编程的核心是 Task 和 Task<T> 对象,这两个对象对异步操作建模。 它们受关键字 async
- Android语音合成与语音识别,供大家参考,具体内容如下这里调用科大讯飞语音的API,语音云开放平台介绍调用科大讯飞语音的API,需要加添
- 本文实例为大家分享了java实现人员信息管理系统的具体代码,供大家参考,具体内容如下实现增删改查.java入门的练手小程序1.Person类