在程序中所有的数据都是以流的形式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流完成对于操作文件内容,要进行文件内容的操作就需要通过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流之字节流的更多相关文章

  1. 理解Java中字符流与字节流的区别

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  2. 【JAVA IO流之字节流】

    字节流部分和字符流部分的体系架构很相似,有四个基本流:InputStream.OutputStream.BufferedInputStream.BufferedOutputStream,其中,Inpu ...

  3. 黑马程序员——JAVA基础之IO流缓冲区,转换流,字节流

    ------- android培训.java培训.期待与您交流! ---------- 字符流的缓冲区        缓冲区的出现提高了对数据的读写效率. 对应类 •  BufferedWriter ...

  4. java io流(字节流)复制文件

    java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ pu ...

  5. Core Java - 流(Stream) - 字节流和字符流(一)

    0. 概述: Java中基于流的I/O构建在4个抽象类之上, 其中2个是字节流,另外2个是字符流. 字节流: InputStream / OutputStream 当操作字节或其它二进制对象时,应当使 ...

  6. java 笔记(4) —— java I/O 流、字节流、字符流

    Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...

  7. Java字符流和字节流对文件操作

    记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writ ...

  8. Java中字符流与字节流的区别

    字符流处理的单元为2个字节的Unicode字符,分别操作字符.字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组.所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单 ...

  9. 字符流;字节流;带缓冲的输入输出流;以及用scanner读文件

    概念: InputStream类是字节输入流的抽象类,是所有字节输入流的父类. OutputStream类是字节输入流的抽象类,是所有字节输出流的父类. In(可以理解为读)Out(可以理解为写) 一 ...

  10. Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律

    第一讲     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...

随机推荐

  1. MyBatis Plus中使用and和or

    如图:show me the code 参考: https://mp.baomidou.com/guide/wrapper.html#or

  2. mysql查询报错this is incompatible with sql_mode=only_full_group_by

    临时改法:select @@GLOBAL.sql_mode;查询当前mysql的模式去掉ONLY_FULL_GROUP_BY重新设置:set @@GLOBAL.sql_mode='STRICT_TRA ...

  3. storm调用kafka重复消费的问题

    1. 实现IBolt接口的bolt需要显式调用collector.ack(); 2. 继承自BaseBasicBlot的bolt, 会帮你自动调用ack的

  4. ES6-正则新增(复习+学习)

    ES6-正则 昨天,复习了正则的基本知识,今天学习ES6新增的正则的知识,做一个总结笔记,大家可以先看4,5对应的方法然后再从头看,话不多说直接上: 1.RegExp构造函数的区别 2.新增的修饰符 ...

  5. HMS Core Insights第八期直播预告--创新能力解读

    [导读] 在上个月举办的HDC2021华为开发者大会上,全新登场的HMS Core 6向大家展示了包括媒体.图形.连接与通信等领域的众多全新开放能力.如仅用一部RGB摄像头的手机即可完成的3D建模,在 ...

  6. Class类简介

    Class类 Java中所有的类.接口.枚举.注解.数组.基本数据类型.void关键字,都有Class对象.通过Class对象可以得到类的完整结构,一个Class对象在jvm中只有一个实例. 获取类实 ...

  7. github文件下载加速器

    https://d.serctl.com/?dl_start

  8. Environment Modules 简明教程

    Environment Modules 简明教程 1. Modules 简介 在 Linux 超算平台上,通常会安装有不同版本的多种编译器和其他软件等,如常用的编译器有 intel 和 gnu,常用的 ...

  9. R语言与医学统计图形-【23】ggplot2坐标系转换函数

    ggplot2绘图系统--坐标系转换函数 包括饼图.环状条图.玫瑰图.戒指图.坐标翻转. 笛卡尔坐标系(最常见). ArcGIS地理坐标系(地图). Cartesian坐标系. polar极坐标系. ...

  10. Linux终端命令行的快捷键列表

    tab键:命令.文件名等自动补全功能. Ctrl+a:光标回到命令行首.Ctrl+e:光标回到命令行尾.Ctrl+k:删除光标处到行尾的字符.Ctrl+u:删除整个命令行文本字符.ctrl+y: 粘贴 ...