Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输。流分为两类:字节流和字符流。

字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的,字节流可以操作任意数据)

字符流:Reader,Writer.(字符流只能操作字符,但是在实际应用中字符流比较方便)

从操作来看又可以分为:输入流和输出流。

在进行IO流操作的时候分为以下几步:1.导入IO流的包,2.进行IO流的异常处理,3.关闭IO流释放资源。

字节流

————————————————————————————————————————————————————————————————————————————————————————————————————————————

FileInputStream:

 FileInputStream fis =new FileInputStram("xxx.text");
int b;
//读取标准写法
while((b=fis.read)!=-1){
System.out.println(b);
}
fis.close();

FileOutputSteam:

FileOutputStream fos=new FileOutputStream("xxx.text",true);//FileOutputStream默认每次回重新生成一个“xxx.text”,如果想要追加,应该加一个true
fos.write();
fos.close();
 

Java中的缓冲区:

在读写数据的时候,一次读写一个数组明显比一个一个字节的读取速度要快的多,所以考虑到这种设计思想,引入了缓冲区。实际上就是对流进行包装。(装饰设计思想)

BufferInputStream和BufferOutputStream:


BufferedInputStream bis=new BufferedInputStream(new FileInputStrean("xxx.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("yyy.txt")
byte[]by=new byte[1024]
int len
while((len=bis.read(by))!=-1){ bos.write(arr,0,len);
}
bis.close();//只需要关闭BufferInputStream
bos.close();

JDK 1.7以下流的异常处理:

需要注意的是在做IO流的异常处理的时候,不能进行try catch.因为IO流是用来操作底层的数据,如果进行了try catch相当于把IO问题隐藏了,无法向上暴露,真确的做法是将IO异常抛出。

try{BufferedInputStream bis=new BufferedInputStream(new FileInputStrean("xxx.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("yyy.txt")
byte[]by=new byte[1024]
int len
while((len=bis.read(by))!=-1){ bos.write(arr,0,len);
}
}finally{
if(bis!=null){
bis.close();//只需要关闭Buffer
}
if(bos!=null){
bos.close();
}
}

JDK 1.7以上流的异常处理:

不需要手动关闭,程序自动关闭。

try(
BufferInputStream bis=new BufferInputStream(new FileInputStrean("xxx.txt"));
BufferOutputStream bos=new BufferOutputStream(new FileOutputStream("yyy.txt")
)
{
byte[]by=new byte[1024]
int len
while((len=bis.read(by))!=-1){ bos.write(arr,0,len);
}
}

字符流

————————————————————————————————————————————————————————————————————————————————————  FileReader:

FileReader fr=new FileReader("xxx.txt")
int c;
while((c=fr.read())!=-1){ //read()方法按照字符大小读取
System.out.print((char)c);
}
c.close();

FileWriter:

FileWriter fw=new FileWriter("xxx.txt")
fw.wrire("你好"); write()方法自动将字符装字节写入
fw.close();

字符流的拷贝:

FileReader fr=new FileReader("xxx.txt");
FileWriter fw=new FileWriter("zzz,txt");
int c;
while((c=fr.read())!=-1){ fw.writer(c);
}
fr.close();
fw.close();

字符流和字节流都可以拷贝文件,但是不推荐使用字符就拷贝文件,因为读取的时候要将字节流转换为字符流,写入的时候要将字符流转换位字节流,太过耗时!

当程序需要读写一段文本时,推荐使用字符流,因为它是按码读取,不会出现半个中文的情况,更加准确!写出时也不用转换为字节流。需要注意的是,使用字符流拷贝时,只能拷纯文本。在读的时候将字符转换为字节的时候可能找不到对应的字节,出现字节丢失。

自定义字节数组拷贝:

FileReader fr=new FileReader("xxx.txt");
FileWriter fw=new FileWriter("zzz.txt");
char[]by=new char[1024];
int len;
while((len=fr.read(by))!=-1){//将文件上的数据转到字符数组中 fw.write(by,0,len);//字符数组中的字符转到文件中
}
fr.close();
fw.close();

带缓冲的字节数组拷贝:

BufferedReader br=new BufferReader(new FileReader ("xxx.txt"));
BufferedWriter bw=new BufferWriter(new BufferWriter("zzz.txt"));
int c
while((c=br.read())!=-1){
bw.writer(c);
}
br.close();
bw.close();

BufferReader和BufferWriter:

BufferedReader br=new BufferReader(new FileReader("xxx.txt"));
BufferedWriter bw=new BufferWriter(new FileWriter("zzz.txt"))
String line;
while((line=br.readLine())!=null){读取一行字符
bw.write(line);
bw.nextLine();//换行 }
br.close();
bw.close();

简单应用实现文本反转:

BufferedReader br=new BufferReader(new FileReader("xxx.txt"));

String line;
ArrayList<String>list=new ArrayList<>();
while((line=br.readLine())!=null){ list.add(line); }
br.close();
BufferedWriter br=new BufferReader(new FileWriter("zzz.txt"));
for(int i=line.size();i>=0;i--){ bw.write(list.get(i)); bw.nextLine(); }
bw.close();

IO流中的装饰设计模式————————————————————————————————————————————————————————————————————————————————————————

设计模式的来源:设计模式最早来源于建筑行业,为了让对象更加容进行推广,进行程序化操作。

装饰设计模式的实质就是对对象进行包装,让他更加具有操作性,在IO流中,Buffer就是一种装饰。装饰设计模式的好处是:耦合性不强,装饰类与被装饰类的变化无关。

JAVA 中的IO流的更多相关文章

  1. java中的IO流

    Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...

  2. Java中的IO流总结

    Java中的IO流总结 1. 流的继承关系,以及字节流和字符流. 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和Buffe ...

  3. Java中的IO流大体介绍

    由于Java中的IO流是在是知识点繁多,所以我大约花了1周的时间将其整理起来.但是整理起来后并不是将完事了,我还是要分字节流和字符流来讲述.然后字节流和字符流中还有是否带有缓冲流. 讲述完IO流后我将 ...

  4. Java中的IO流,Input和Output的用法,字节流和字符流的区别

    Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...

  5. Java中的IO流(五)

    上一篇<Java中的IO流(四)>记录了一下Properties类,此类不属于IO流,它属于集合框架.接下来说一下IO流中的其它流 一,打印流PrintStream PrintStream ...

  6. Java中的IO流(六)

    上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...

  7. Java中的IO流(四)

    上一篇<Java中的IO流(三)>把IO流中的文件及目录操作的对象File类记录了一下,本篇把本不属性IO流但又和IO流有关系的一个对象作一下记录,此对象本属于集合框架里的一个子集,即Pr ...

  8. Java中的IO流(三)

    上一篇<Java中的IO流(二)>把学习Java的字符流以及转换流作了一下记录,从本篇开始将把IO流中对文件或文件夹操作的对象File类的学习进行一下记录. 一,File类的构造函数及字段 ...

  9. Java中的IO流(二)

    上一篇<Java中的IO流(一)>把学习IO流的字符流作了一下记录,本篇把字节流记录一下. 一,Java中的字节流 Java中的字节流的操作方式与字符流的操作方式大致相同,连方法名都是类似 ...

随机推荐

  1. Serf 了解

    Introduction to Serf Welcome to the intro guide to Serf! This guide will show you what Serf is, expl ...

  2. bower.json 的版本范围

    bower.json 的版本范围 有小伙伴问 ~2.2.0 什么意思. 而且在git 的tags 中没有了 2.2.0 版本,怎么样? 实际上 ~2.2.0 的意思是 >=2.2.0 <2 ...

  3. SysTick_Config

    SystemCoreClockUpdate();SysTick_Config(SystemCoreClock/2000);   //500us

  4. ecmall页面空白解决方案(转)

    页面空白解决方案: ------------------------------------------------------------------------------------------ ...

  5. RK3288 查看ddr频率

    转载请注明出处:https://www.cnblogs.com/lialong1st/p/8515135.html RK3288 查看 ddr 当前频率的方式有两种,第一种是通过 adb 查看,第二种 ...

  6. C语言中可变形参简单实例

    以下程序主要包括三个主要函数: 一个最简单的可变形参函数实例: 一个简单的printf功能的实例: 一个打印字符串函数(辅助): 其中myPrintf函数,实现了printf的部分简单功能,并没有去实 ...

  7. 【洛谷】P1541 乌龟棋(四维背包dp)

    题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...

  8. Python Object Oriented

    1. Creating class class className: 'Optional class documentation string' class_suite The class has a ...

  9. ubuntu用户添加adduser, useradd并给予sudo权限

    ubuntu用户添加adduser, useradd并给予sudo权限 2016-06-15 10:36 1286人阅读 评论(0) 收藏 举报  分类: Ubuntu(80)  ubuntu和win ...

  10. BIOS设置图解教程-看完就没有不明白的了

    BIOS(基本输入/输出系统)是被固化在计算机CMOS RAM芯片中的一组程序,为计算机提供最初的.最直接的硬件控制.BIOS主要有两类∶AWARD BIOS和AMI BIOS.正确设置BIOS可大大 ...