I/O流之字节流
在程序中所有的数据都是以流的形式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流完成对于操作文件内容,要进行文件内容的操作就需要通过Java提供的两组数据流的操作类完成
字节操作流(byte):OutputStream,InputStream;
字符操作流(char):Writer,Reader
对于资源内容的操作,都会按照如下的步骤执行
(1)如果要操作的是文件,那么首先要通过File类对象找到一个要操作的文件路径
(2)通过字节流或者字符流的子类为字节流或字符流的对象实例化
(3)执行读写操作
(4)最后一定要关闭操作的资源。
1.字节输出流
public class test2 {
public static void main(String[] args) throws IOException {
File file=new File("D:"+File.separator+"hellodemo"+File.separator+"test.txt");//定义文件路径
if(!file.getParentFile().exists()) {//判断父路径是否存在
file.getParentFile().mkdirs();//创建父路径
}
OutputStream output=new FileOutputStream(file);//通过子类实例化父类
String data="Hello world";
output.write(data.getBytes());//将数据变为字节数组输出
output.close();
}
}
关于OutputStream定义的三个输出方法
1.public abstract void write(int b) throws IOException
2.public void write(byte[] b) throws IOException
3.public void write(byte[] b,int off,int len)throws IOException //从off开始,len结束
FileOutputStream的构造方法
1.public FileOutStream(File file) throws FileNotFound Exception//传入file实例构成文件输出流
2.public FileOutStream(File file,boolean append)throws FileNotFoundException//用于追加数据
追加数据
OutputStream output=new FileOutputStream(file,true);//通过子类实例化父类,设置追加为true
String data="\r\ncaizhen 666";// /r/n表示换行
output.write(data.getBytes()); //写入
output.close();
输出部分数据
output.write(data.getBytes(),0,5);
2.字节输入流
1.public abstract int read()throws IOException//读取单个字符,如果读到结尾返回-1
2.public int read(byte[] b)throws IOException//读取多个字符,如果需要读取的数据小于byte的数据,返回的是数据的个数,如果不是且已经读完则返回-1
3.public int read(byte[] b,int off,int len)throws IOException
2.1 一次性全部读取
public class test2 {
public static void main(String[] args) throws IOException {
File file=new File("D:"+File.separator+"hellodemo"+File.separator+"test.txt");//定义文件路径
if(file.exists()) {//判断文件是否存在
InputStream input=new FileInputStream(file);
byte data[]=new byte[1024];//假设要读的长度是1024
int len=input.read(data);//读取数据,返回读取个数
input.close();
System.out.println("读取的数据是:"+new String(data,0,len));
}
}
}
2.2单个字节读取
public class test2 {
public static void main(String[] args) throws IOException {
File file=new File("D:"+File.separator+"hellodemo"+File.separator+"test.txt");//定义文件路径
if(file.exists()) {//判断文件是否存在
InputStream input=new FileInputStream(file);
byte data[]=new byte[1024];//假设要读的长度是1024
int temp=0;
int foot=0;
while((temp=input.read())!=-1) {//表示未读取完毕
data[foot++]=(byte)temp;
}
input.close();
System.out.println("读取的数据是:"+new String(data,0,foot));
}
}
}
程序解读:
1.定义文件路径
2.判断文件是否存在,若存在则执行
3.利用FileInputStream的构造方法传入file实例获得InputStream对象
4.新建一个长度为1024的字节数组
5.利用InputStream对象的read()方法,读取一个字节,并且把变量赋值给我temp
6.当temp=-1时跳出循环,表示读取完毕
7.利用字符串的构造方法生成字符串并打印
3.部分读取
InputStream input=new FileInputStream(file);
byte data[]=new byte[1024];//假设要读的长度是1024
int len=input.read(data,0,3);
input.close();
System.out.println("读取的数据是:"+new String(data,0,len));
I/O流之字节流的更多相关文章
- 理解Java中字符流与字节流的区别
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
- 【JAVA IO流之字节流】
字节流部分和字符流部分的体系架构很相似,有四个基本流:InputStream.OutputStream.BufferedInputStream.BufferedOutputStream,其中,Inpu ...
- 黑马程序员——JAVA基础之IO流缓冲区,转换流,字节流
------- android培训.java培训.期待与您交流! ---------- 字符流的缓冲区 缓冲区的出现提高了对数据的读写效率. 对应类 • BufferedWriter ...
- java io流(字节流)复制文件
java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ pu ...
- Core Java - 流(Stream) - 字节流和字符流(一)
0. 概述: Java中基于流的I/O构建在4个抽象类之上, 其中2个是字节流,另外2个是字符流. 字节流: InputStream / OutputStream 当操作字节或其它二进制对象时,应当使 ...
- java 笔记(4) —— java I/O 流、字节流、字符流
Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...
- Java字符流和字节流对文件操作
记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writ ...
- Java中字符流与字节流的区别
字符流处理的单元为2个字节的Unicode字符,分别操作字符.字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组.所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单 ...
- 字符流;字节流;带缓冲的输入输出流;以及用scanner读文件
概念: InputStream类是字节输入流的抽象类,是所有字节输入流的父类. OutputStream类是字节输入流的抽象类,是所有字节输出流的父类. In(可以理解为读)Out(可以理解为写) 一 ...
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
第一讲 IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...
随机推荐
- python有关于图像的深度和通道
目录: (一)图像的深度和图像的通道 (1)图像的深度 (2)图像的通道 (二)自定义一张多通道的图片 (1)zeros 函数 (2)ones 函数 (三)自定义一张单通道的图片 (四)像素操作 ...
- [noi34]palindrome
分割实际上就是不断地从两端取出一样的一段,并对剩下的串进行分割.下面我们来证明一下每一次贪心取出最短一段的正确性: 考虑两种分割方式,分别表示成S=A+B+A和S=C+D+C,其中A就是最短的一段,那 ...
- [hdu6761]Minimun Index
$lyndon\ word$(以下简写为Lw):对于一个字符串s,其为Lw当且仅当其的最小后缀为自身 性质:若$u<v$为LW,那么$uv$也为Lw(反证法即可证) $lyndon$分解:将一个 ...
- 5.基于二进制部署kubernetes(k8s)集群
1 kubernetes组件 1.1 Kubernetes 集群图 官网集群架构图 1.2 组件及功能 1.2.1 控制组件(Control Plane Components) 控制组件对集群做出全局 ...
- CF1575G GCD Festival
\(\sum\sum gcd(i,j) \times gcd(a_i,a_j)\) 考虑枚举这个 \(gcd(i,j)\) . \(\sum_d \varphi(d)\sum_{i|d}\sum_{j ...
- CF1559D2 Mocha and Diana (Hard Version)
考虑到加树边每次最多只导致一对联通块之间的状态. 所以我们以任意顺序加入当前的合法边. 我们考虑先加入所有可加的\((1,a)\) 然后统计只在\(A\)中与1连的点,\(B\)中与2连的点. 则他们 ...
- Codeforces 1491G - Switch and Flip(构造题)
Codeforces 题目传送门 & 洛谷题目传送门 obviously,难度高一点的构造题对我来说都是不可做题 首先考虑将排列拆成一个个置换环,也就是 \(\forall i\) 连边 \( ...
- clickhouse使用的一点总结
clickhouse据说是用在大数据量的olap场景列式存储数据库,也有幸能够用到它在实际场景中落地.本篇就来说说简单的使用心得吧. 1. 整体说明 架构啥的,就不多说了,列式存储.大数据量.高性能. ...
- 【机器学习与R语言】4-决策树
目录 1.决策树原理 2.决策树应用示例 2.1)收集数据 2.2)探索和准备数据 2.3)训练模型 2.4)评估模型性能 2.5)提高模型性能 通过自适应增强算法(boosting) 将惩罚因子分配 ...
- Linux中shell去除空行的几种方法
有时我们在处理和查看文件时,经常会有很多空行,为了美观或是有需要时,就有必要把这些除行去掉了,方法如下: #如需将结果输出加入重定向 > 文件名 1)用tr命令 代码如下: cat ...