一、概述

IO流用来处理设备之间的数据传输 上传文件和下载文件

Java对数据的操作是通过流的方式

Java用于操作流的对象都在IO包中

二、IO流的分类:

(1)流向:
        输入流 读取数据
        输出流 写出数据
    (2)数据类型:
        字节流
            字节输入流 读取数据 InputStream
            字节输出流 写出数据 OutputStream
        字符流
            字符输入流 读取数据 Reader
            字符输出流 写出数据 Writer

三、字节流

1、字节输出流(OutputStream抽象类,FileOutputStream实现)

FileOutputStream

(1)步骤

1、创建字节输出流对象
2、调用方法,写数据
3、释放资源

(2)构造方法:
    FileOutputStream(File file) 创建文件输出流以写入由指定的 File对象表示的文件。
    FileOutputStream(String name) 创建文件输出流以指定的名称写入文件,没有文件,自动创建文件

(3)字节输出流写数据的几种方法:

public void write(int b):写入的是对应的ASCII码值
    public void write(byte[] b):写入字节数组,也是对应的ASCII码值
    public void write(byte[] b,int off,int len) :off是指定位置开始,len是写入的长度。

 FileOutputStream fos = new FileOutputStream("c.txt");//创建文件输出流,可以将数据写入文件
//        System.out.println(fos);//调用方法,写数据fos.write("大数据,yyds".getBytes());//方法参数是字节数组,把字符窜转换成字节数组//释放资源,防止资源浪费//close()关闭此文件输出流并释放与此流相关联的任何系统资源。fos.close();fos.write("继续写入".getBytes());//关闭了输出流,在写入会报错。

(4)close()关闭此文件输出流并释放与此流相关联的任何系统资源

释放资源,防止资源浪费

(5)写入数据后如何继续追加写入数据,和换行(\r\n)

//FileOutputStream(String name, boolean append)//创建文件输出流以指定的名称写入文件。//true表示的是可以追加写入数据FileOutputStream fos = new FileOutputStream("e.txt", true);fos.write("\r\n今天下雪了\r\n".getBytes());fos.write("但是没有看到积雪".getBytes());//释放资源fos.close();//....

2、字节输入流(InputStream抽象类,FileInputStream实现

FileInputStream(一个文件只能读取一次,两次读取只显示一个结果,且close()后不能读取报错)

(1)构造方法

FileInputStream(File file)  :参数是File类
FileInputStream(String name):参数是文件名,若文件不存在,运行报错。

(2)成员方法

public int read():一次只读一个字节,返回的是ASCII码值

public int read(byte[] b):一次读取一个字节数组

FileInputStream fis=new FileInputStream("a.txt");//第一种一次只读一个字符
//        int i=0;
//        while ((i=fis.read())!=-1){
//            System.out.print((char) i);//强制转换
//        }
//        fis.close();//一次读取一个字节数组byte[] b=new byte[1024];int length=0;           //这里的length表示文件里的真实字节长度while ((length=fis.read(b))!=-1){System.out.println(new String(b,0,length));}fis.close();

3、应用:a文件复制到b文件,读取a文件,写入b文件

 FileInputStream fls=new FileInputStream("a.txt");//a文件必须存在FileOutputStream fps=new FileOutputStream("b.txt");//b文件可以不存在//        int i=0;
//        while ((i=fls.read())!=-1){
//            fps.write(i);
//        }byte[] b=new byte[1024];int length=0;while ((length=fls.read(b))!=-1){fps.write(b,0,length);}fls.close();fps.close();

4、字节缓冲流(方法相同,构造方法里参数是字节流对象)

(1)字节缓冲输出流
        BufferedOutputStream

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("g.txt"));

(2)字节缓冲输入流
        BufferedInputStream

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("g.txt"));

5、编码,解码

/*String(byte[] bytes, Charset charset)构造一个新的String,由指定charset编码表将字节数组解码。byte[] getBytes(Charset charset)使用给定的charset将该String编码为字节序列,将结果存储到新的字节数组中。 如果两个编码表不同,则解码失败
*/String s = "你好";byte[] bytes2 = s.getBytes("Unicode");编码printArray(bytes2);//输出字节数组的自定义方法System.out.println();//byte[] -- StringString s1 = new String(bytes2, "Unicode");解码System.out.println(s1);
-2,-1,79,96,89,125,
你好

四、字符流(=字节流+编码表)

1、字符输出流 (Writer类,子类OutputStreamWriter)

(1)OutputStreamWriter:

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("写文件的名字"));

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("bbb.txt"),"GBK");

不加编码表的简化写法:FileWriter
    FileWriter fw = new FileWriter("写文件的名字");

(2)方法:写入对应的编码表,默认ASCII码表
    public void write(int c)
    public void write(char[] cbuf)
    public void write(char[] cbuf,int off,int len)
    public void write(String str)
    public void write(String str,int off,int len)

注意:当没有调用close()方法时,运行write()方法,发现文件中没有写入数据,文件实际上在硬盘存储的是字节,需要手动转换一下进行存储,可以调用flush()方法,close和flush方法都能进行转换,但flush不能关闭流对象。

2、字符输入流(Reader类 InputStreamReader子类)

(1)InputStreamReader

InputStreamReader isr = new InputStreamReader(new FileInputStream("bbb.txt"));
InputStreamReader isr = new InputStreamReader(new FileInputStream("ccc.txt"),"GBK");

简化写法:FileReader
    FileReader fr = new FileReader("读取数据的文件名");

(2)方法

          1、一次读取一个字符int ch = 0;while((ch = fr.read())!=-1){System.out.print((char) ch);}fr.close();2、一次读取一个字符数组char[] chars = new char[1024];int length = 0;while((length = fr.read(chars))!=-1){System.out.print(new String(chars,0,length));}fr.close();

3、字符缓冲流

(1)字符缓冲输出流

BufferedWriter bw = new BufferedWriter(new FileWriter("a2.txt"));

(2)字符缓冲输入流

BufferedReader br = new BufferedReader(new FileReader("a.txt"));

(3)特殊方法

BufferedWriter:
     void newLine()
     写一行行分隔符。 行分隔符字符串由系统属性line.separator定义,并不一定是单个换行符('\ n')字符。

BufferedReader:
     public String readLine()
     读一行文字。 一行被视为由换行符('\ n'),回车符('\ r')中的任何一个或随后的换行符终止。

public class BufferedDemo1 {public static void main(String[] args) {try {write();} catch (Exception e) {e.printStackTrace();}try {read();} catch (Exception e) {e.printStackTrace();}}public static void read() throws Exception{//创建字符缓冲输入流对象BufferedReader br = new BufferedReader(new FileReader("a.txt"));//public String readLine() 一次读取一行文字//用循环读取String line = null;while ((line = br.readLine())!=null){System.out.println(line);}br.close();}public static void write() throws Exception{//创建字符缓冲输出流对象BufferedWriter bw = new BufferedWriter(new FileWriter("a3.txt"));for(int i=1;i<=10;i++){bw.write("大数据"+i);bw.newLine(); //根据系统写入换行符bw.flush();}bw.close();}
}

应用

/*把ArrayList集合中的字符串数据存储到文本文件*/
public class IOTest1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();//向集合中添加元素list.add("hello");list.add("world");list.add("java");list.add("bigdata");BufferedWriter bw = null;//创建字符缓冲输出流对象try {bw = new BufferedWriter(new FileWriter("a4.txt"));for(String s : list){bw.write(s);bw.newLine();bw.flush();}} catch (IOException e) {e.printStackTrace();}finally {try {bw.close();} catch (IOException e) {e.printStackTrace();}}}
}

IO流,字节流和字符流相关推荐

  1. java byte char io流_吃透Java IO:字节流、字符流、缓冲流

    前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...

  2. 吃透Java IO:字节流、字符流、缓冲流

    IO流是Java中的一个重要构成部分,也是我们经常打交道的. 下面几个问题(问题还会继续补充),如果你能对答如流,那么恭喜你,IO知识掌握得很好,可以立即关闭文章.反之,你可以在后面得文章中寻找答案. ...

  3. 【Java基础】吃透Java IO:字节流、字符流、缓冲流

    文章目录 [Java基础-3]吃透Java IO:字节流.字符流.缓冲流 一.初识java IO 1.1 IO流分类 1.1.1 输入流与输出流 1.1.2 字节流与字符流 1.1.3 节点流和处理流 ...

  4. java字符流字节流场景_【120期】Java IO:字节流、字符流、缓冲流

    IO流是Java中的一个重要构成部分,也是我们经常打交道的.这篇关于Java IO的博文干货满满,堪称全网前三(请轻喷!) 下面几个问题(问题还会继续补充),如果你能对答如流,那么恭喜你,IO知识掌握 ...

  5. fileoutputstream 字节乱码_吃透Java IO:字节流、字符流、缓冲流

    前言 有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身 ...

  6. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  7. Java基础---认识IO流---字节流、字符流---缓冲流---转换流

    一.认识IO流 I/O就是用于设备之间进行数据交互的对象所属的类型 IO流的体系结构:根据分类,有四种流对象类型 字节流:可以直接操作字节信息的流对象 字节输入流:InputStream 字节输出流: ...

  8. IO流——字节流、字符流

    在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 流的分类 ①   流按其流向分为"输入流 ...

  9. Java 常用IO流(字节流和字符流)详解

    一,简介及分类 IO流用来处理设备之间的数据传输:JAVA对数据的操作是通过流的方式:JAVA用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流. 流按操作类型分为两种: 字节流 : 字节流 ...

  10. Java文件流字节流和字符流的区别

    字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位, 字符流以字符为单位 处理对象不同:字节流能处理所有类型的文件,包括图片,视频等,而字符流只能处理字符类型的数据 字节流:一次读入 ...

最新文章

  1. shell的date
  2. 用CNN做NLP文本分类竞赛
  3. 指定 年 周 星期 获取这周的开始日期和结束日期
  4. ORM(Object Relational Mapping,对象/关系映射)
  5. linux下使用select实现精确定时器
  6. Javaweb学习笔记——使用Jdom解析xml
  7. 求5的阶乘和1-5的阶乘和
  8. [发布] QQGame 连连看辅助工具(限制功能版)
  9. 数据可视化之美-动态图绘制(以Python为工具)
  10. linux poodle漏洞,SSL POODLE[贵宾犬]漏洞的解决办法
  11. SpringBoot工程接入第三方支付渠道支付宝(C扫B支付)
  12. 小白都能学会的Spring Boot!
  13. 实时填报推送微信消息及审核(帆软报表)
  14. 推荐:(链接)幽默男女--绝对搞笑!!(每日更新)
  15. 阿里云免费的ssl证书到期怎么续费
  16. c语言自定义函写计算器,C语言实现计算器功能
  17. 遇到空指针异常的时候我们应该怎么办
  18. 套接字I/O模型-WSAEventSelect(转载)
  19. 差钱吗?周杰伦线上演唱会没关打赏惹争议,看看同时直播的腾格尔
  20. MySQL理论:脏读、不可重复读、幻读

热门文章

  1. bugku web篇
  2. 浏览器console的用法
  3. js 实现 禁用用户浏览器选中,复制,剪切 ,粘贴功能
  4. yum的方式安装mysql_CentOS 通过yum方式快速安装MySQL
  5. 阅读笔记:《Python机器学习及实战》
  6. 2022-2027年中国童装行业市场全景评估及发展战略规划报告
  7. 网吧的服务器设置全攻略
  8. nuxt项目运行在ie报错
  9. 英雄联盟为什么服务器找不到,英雄联盟为什么连接不上服务器(英雄联盟没有响应是什么...
  10. 封神召唤师显示服务器爆满,封神召唤师应用宝大区异常活动处理公告