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用于操作流的对象都 ...
随机推荐
- [第二章]c++学习笔记4(复制构造函数)
性质 (1)只有一个参数,即被同类对象的引用. 注 起作用的三种情况 注 常量引用参数
- Java 中的关键字
Java 中有多少个关键字,有大小写之分吗? Java 中有 48 个关键字在使用 + 两个保留关键字未使用,共 50 个关键字. Java 关键字全部都由是小写组成. Java 中保留关键字分别是哪 ...
- linux auditd审计的简单使用和理解
Linux审计主要用于查看系统改动的信息,如系统密码修改,用户的新建,主要用于保障系统的安全,下面简单介绍审计如何使用 1启动审计进程: [tommy@xie-testlog]$ sudo servi ...
- 单线程 Redis 为什么这么快,看看这篇就知道了
Redis 作为一种 KV 缓存服务器,有着极高的性能,相对于 Memcache,Redis 支持更多种数据类型,因此在业界应用广泛. 记得刚毕业那会参加面试,面试官会问我 Redis 为什么快,由于 ...
- [源码解析] PyTorch 分布式(8) -------- DistributedDataParallel之论文篇
[源码解析] PyTorch 分布式(8) -------- DistributedDataParallel之论文篇 目录 [源码解析] PyTorch 分布式(8) -------- Distrib ...
- [cf1458C]Latin Square
维护$n^{2}$个三元组$(x,y,z)$,每一个三元组描述$a_{x,y}=z$ 对于RLDU这四个操作,即将所有三元组的$x$或$y$执行$\pm 1$(模$n$意义下) 对于IC这两个操作,即 ...
- [atAGC045E]Fragile Balls
构造一张有向图$G=([1,n],\{(a_{i},b_{i})\})$(可以有重边和自环),定义其连通块为将其看作无向图(即边无向)后分为若干个连通块 记$in_{i}$为$i$的入度(即最终盒子中 ...
- [bzoj1106]立方体大作战
先贪心,容易发现如果两个点中间没有点对,那么一定可以先把这两个点消掉分析一下,就可以发现这样两个点的答案就是这两个点对中间不成对的点数量扫描过去,线段树维护每一个点的权值(是否会被算入答案)即可 1 ...
- linux下root用户和普通用户切换
没有root权限干啥都费劲 切换root用户 sudo su 切换普通用户 su player3
- C/C++ Qt Tree与Tab组件实现分页菜单
虽然TreeWidget组件可以实现多节点的增删改查,但多节点操作显然很麻烦,在一般的应用场景中基本上只使用一层结构即可解决大部分开发问题,TreeWidget组件通常可配合TabWidget组件,实 ...