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用于操作流的对象都 ...
随机推荐
- ssh密码登录
https://stackoverflow.com/a/16928662/8025086 https://askubuntu.com/a/634789/861079 #!/usr/bin/expect ...
- mybatis中批量插入的两种方式(高效插入)
MyBatis简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用 ...
- ThreadPoolExecutor里面4种拒绝策略(详细)
ThreadPoolExecutor类实现了ExecutorService接口和Executor接口,可以设置线程池corePoolSize,最大线程池大小,AliveTime,拒绝策略等.常用构造方 ...
- C# 判断未将对象引用设置到对象的实例,出错的代码到底在第几行
DataTable dt = null; try { var x = dt.Rows.Count; } catch(NullReferenceException nullexception) { Me ...
- robotframework-autoitlibrary离线安装
由于AutoItLibrary需要依赖pywin32库.所以要使用AutoItLibrary必须要先安装好pywin32 1.pywin32下载地址安装:http://sourceforge.net/ ...
- logstash插件配置-codec插件说明json和multiline
编码插件(Codec) Codec 是 logstash 从 1.3.0 版开始新引入的概念(Codec 来自 Coder/decoder 两个单词的首字母缩写). 在此之前,logstash 只支持 ...
- Jenkins教程(八)实现 GitLab 触发 Jenkins 自动按模块发布前端
楔子 上篇文章解决了提交/合并请求自动触发的需求,但所有前端模块都在同一个代码仓库里,如何获取变更文件路径确定要发布哪个模块呢?本文将带你解决这个问题. 思路 分别解决 3 个问题: 获取变更的文件列 ...
- 【Microsoft Azure 的1024种玩法】四. 利用Azure Virtual machines 打造个人专属云盘,速度吊打某云盘
[简介] 1.Azure Virtual machines是Azure 提供的多种可缩放按需分配计算资源之一,Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或 ...
- Spring扩展点-v5.3.9
Spring 扩展点 **本人博客网站 **IT小神 www.itxiaoshen.com 官网地址****:https://spring.io/projects/spring-framework T ...
- Pycharm整体缩进和减少缩进
整体缩进:鼠标拉选住代码块,按下tab键. 反向缩进:鼠标拉选住代码块,按下shift+tab键.