19【字节流、字符流】
文章目录
- 一、IO概述
- 1、什么是IO
- 2、IO的分类
- 3、顶级父类
- 二、字节流
- 1、字节输出流OutputStream
- 2、FileOutputStream类
- 构造方法
- 写出字节数据
- 3、字节输入流InputStream
- 4、FileInputStream类
- 构造方法
- 读取字节数据
- 5、复制案例
- 三、字符流
- 1、 字符输入流Reader
- 2、FileReader类
- 构造方法
- 读取字符数据
- 3、字符输出流Writer
- 4、FileWriter类
- 构造方法
- 写出数据
- 四、IO异常的处理
一、IO概述
1、什么是IO
Java中I/O操作主要是指使用 java.io 包下的内容进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。
2、IO的分类
根据数据的流向分为:输入流和输出流。
输入流 :把数据从其他设备上读取到内存中的流。
输出流 :把数据从内存中写出到其他设备上的流。
格局数据的类型分为:字节流和字符流。
字节流 :以字节为单位读写数据的流。
字符流 :以字符为单位读写数据的流。
3、顶级父类
输入流 | 输出流 |
---|---|
字节输入流InputStream | 字节输出流OutputStream |
字符输入流Reader | 字符输出流Writer |
二、字节流
1、字节输出流OutputStream
java.io.OutputStream抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。
public void close() :关闭此输出流并释放与此流相关联的任何系统资源
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出
public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流
public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流
public abstract void write(int b) :将指定的字节输出流
2、FileOutputStream类
java.io.FileOutputStream类是文件输出流,用于将数据写出到文件。
构造方法
public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件
public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件
当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有这个文件,会创建该文件。如果有这个文件,会清空这个文件的数据。
写出字节数据
//写出字节public static void main(String[] args) throws IOException {//使用File对象创建流对象File file = new File("a.txt");FileOutputStream fos = new FileOutputStream(file);//写出数据fos.write(97); //写出第1个字节fos.write(98); //写出第2个字节fos.write(99); //写出第3个字节//关闭资源fos.close();}
//写出字节数组public static void main(String[] args) throws IOException {//使用文件名称创建流对象FileOutputStream fos = new FileOutputStream("b.txt");//字符串转换为字节数组byte[] bytes = "你好".getBytes();//写出字节数组数据fos.write(bytes);//关闭资源fos.close();}
//写出指定长度字节数组public static void main(String[] args) throws IOException {//使用文件名称创建流对象FileOutputStream fos = new FileOutputStream("c.txt");//字符串转换为字节数组byte[] bytes = "hello".getBytes();//写出从索引2开始,2个字节 hefos.write(bytes, 0, 2);//关闭资源fos.close();}
//数据追加续写public static void main(String[] args) throws IOException {//使用文件名称创建流对象FileOutputStream fos = new FileOutputStream("c.txt");//定义字节数组byte[] words = {97, 98, 99, 100, 101};//遍历数组for (int i = 0; i < words.length; i++) {//写出一个字节fos.write(words[i]);//写出一个换行 换行符号转成数组写出fos.write("\r\n".getBytes());}// 关闭资源fos.close();}
3、字节输入流InputStream
java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。
public void close() :关闭此输入流并释放与此流相关联的任何系统资源
public abstract int read() : 从输入流读取数据的下一个字节
public int read(byte[] b) : 从输入流中读取一些字节数并将它们存储到字节数组 b中
4、FileInputStream类
构造方法
FileInputStream(File file) : 通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的File对象file命名。
FileInputStream(String name) : 通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名。
读取字节数据
//读取字节public static void main(String[] args) throws IOException {//使用文件名称创建流对象FileInputStream fis = new FileInputStream("a.txt");//读取数据返回一个字节/*int read = fis.read();System.out.println(read); //97read = fis.read();System.out.println(read); //98read = fis.read();System.out.println(read); //99read = fis.read();System.out.println(read); //-1System.out.println("========");*///定义变量保存数据int len = 0;while ((len = fis.read()) != -1) {System.out.println(len);}//关闭资源fis.close();}
//读取字节数组public static void main(String[] args) throws IOException {// 使用文件名称创建流对象.FileInputStream fis = new FileInputStream("a.txt"); //文件中abc//定义变量作为有效个数int len = 0;//定义字节数组作为装字节数据的容器byte[] b = new byte[2];//循环读取while ((len = fis.read(b)) != -1) {//每次读取后 把数组的有效字节部分变成字符串打印System.out.println(new String(b, 0, len));// len 每次读取的有效字节个数}//关闭资源fis.close();}
5、复制案例
public static void main(String[] args) throws IOException {//指定数据源FileInputStream fis = new FileInputStream("D:\\YOLO\\Pic\\DSC01161.JPG");//指定目的地FileOutputStream fos = new FileOutputStream("D:\\YOLO\\JavaSE");//定义数组byte[] bytes = new byte[1024];//定义长度int len = 0;//循环读取while ((len = fis.read(bytes)) != -1) {//写出数据fos.write(bytes, 0, len);}//关闭资源fos.close();fis.close();}
三、字符流
1、 字符输入流Reader
java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
public void close() :关闭此流并释放与此流相关联的任何系统资源。
public int read() : 从输入流读取一个字符
public int read(char[] cbuf) : 从输入流中读取一些字符并将它们存储到字符数组cbuf中
2、FileReader类
构造方法
FileReader(File file) :创建一个新的FileReader给定要读取的File对象
FileReader(String fileName) :创建一个新的 FileReader给定要读取的文件的名称
读取字符数据
//读取字符public static void main(String[] args) throws IOException {//使用文件名称创建流对象FileReader fr = new FileReader("b.txt");int len = 0;while ((len = fr.read()) != -1) {System.out.println((char) len);}fr.close();}
//读取字符数组public static void main(String[] args) throws IOException {//使用文件名称创建流对象FileReader fr = new FileReader("b.txt");char[] chars = new char[2];while (fr.read(chars) != -1) {System.out.println(new String(chars));}fr.close();}
3、字符输出流Writer
java.io.Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。
void write(int c) 写入单个字符
void write(char[] cbuf) 写入字符数组
abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len写的字符个数
void write(String str) 写入字符串
void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数
void flush() 刷新该流的缓冲
void close() 关闭此流但要先刷新它
4、FileWriter类
构造方法
FileWriter(File file) :创建一个新的 FileWriter给定要读取的File对象
FileWriter(String fileName) :创建一个新的 FileWriter给定要读取的文件的名称
写出数据
//写出字符public static void main(String[] args) throws IOException {FileWriter fw = new FileWriter("a.txt");//写出数据fw.write(97);fw.write('b');fw.write('C');fw.write(30000);fw.close();}
//写出字符public static void main(String[] args) throws IOException {FileWriter fw = new FileWriter("a.txt");//写出数据 通过flushfw.write(97);fw.flush();fw.write('b');fw.flush();//写出数据,通过closefw.write('C');fw.close();fw.write(30000); //java.io.IOException: Stream closedfw.close();/*flush 刷新缓冲区 流对象可以继续使用close 先刷新缓冲区 然后通知系统释放资源 流对象不可以再被使用了*/}
//写出字符数组public static void main(String[] args) throws IOException {//创建流对象FileWriter fw = new FileWriter("a.txt");//字符串转换为字节数组char[] chars = "星际穿越".toCharArray();fw.write(chars); //星际穿越//写出从索引2开始 2个字节fw.write(chars, 2, 2); //穿越fw.close();}
//写出字符串public static void main(String[] args) throws IOException {//创建流对象//true代表续写FileWriter fw = new FileWriter("a.txt", true);String s = "加勒比海盗";fw.write(s); //加勒比海盗//写出换行fw.write("\r\n");fw.write(s, 1, 3); //勒比海fw.close();}
四、IO异常的处理
JDK7之前
public static void main(String[] args) {FileWriter fw = null;try {fw = new FileWriter("b.txt");fw.write("hello");} catch (IOException e) {e.printStackTrace();} finally {if (fw != null) {try {fw.close();} catch (IOException e) {e.printStackTrace();}}}}
JDK7之后
public static void main(String[] args) {try (FileWriter fw = new FileWriter("b.txt")) {fw.write("hello");} catch (IOException e) {e.printStackTrace();}}
19【字节流、字符流】相关推荐
- java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...
- 字节流字符流IO资源处理PropertiesResourceBundle
字节流&字符流&IO资源处理&Properties&ResourceBundle - 能够使用字节输入流读取数据到程序//1.创建FileInputStream对象,构 ...
- lo流知识(字节流 字符流)
概述:lo流分为字节流字符流 字节流分为:输出流和输入流 输入流:从文件到控制台(把数据从其他设备输到内存中去)读操作 输出流:从控制台到文件(把数据从内存上输出到别的地方)写操作 按数据类型分: 字 ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流...
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) •p ...
- IO流1(字节流+字符流+输入流+输出流+节点流+处理流)
一(IO流简介) 大多数应用程序都需要实现与设备间的数据传输,如键盘输入数据.显示器显示程序运行的结果等.在Java中,将这种通过不同输入输出设备之间的数据传输抽象表述为"流",程 ...
- java基础练习复习二:递归字节流字符流二
本篇是基于java基础练习复习一:递归&字节流&字符流一, 如果对您有帮助 ,请多多支持.多少都是您的心意与支持,一分也是爱,再次感谢!!!打开支付宝首页搜"55672346 ...
- IO流之字节流字符流理解
目录: 一.什么是IO流 : 二.流的分类: 三.字节流解析: 四.字符流解析: 五.序列流(合并流): 一.什么是IO流 简单说就是将数据(文本,音频,视频,图片等)以流的形式进行读写. 举个栗子 ...
- IO流 序列化反序列化 Properties 缓冲流 字节流 字符流
package com.llb.io;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundE ...
- java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...
- io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...
最新文章
- mysqlimport命令
- [ linq2db ] 使用LoadWith()对外键进行查询
- kubernetes (1)基本概念
- 阿里云万郁香:多样付费选择构筑成本最优的弹性体验
- 一切的开始源于网络的虚拟
- 开源,不是一种道德绑架
- 从C#中传递object到lua的一个问题
- Rust: Rangechar 'a'..'z' 能干什么?......待续
- 激光雕刻机DIY之二:GRBL的下载与参数配置
- 计算机系统类型怎么改变,更改文件类型_win7电脑系统文件类型怎么更改?
- android超频使用方法,SetCPU高级设置
- narwal机器人_国货之光!云鲸NARWAL扫地机器人国外众筹获第一
- 如何在iPhone或iPad上使用控制中心
- 聊新款Macbook pro
- Linux Signal (2): signal函数
- oracle lag over 用法,lag()使用方法
- 知识点滴 - 无线电频谱划分
- linux 终端分屏命令vsp
- 全球调研发现,有四分之一的人表示不知道健康和可持续食品是什么
- 藉由GZipStream的壓縮,來減少Web Service的傳輸量