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. pymongo和mongodbengine之间的区别

    pymongo是一个mongo driver,可以用来连接数据库以及对数据库进行操作,但是是用mongo自己的用来操作数据库的语句进行操作数据库,而mongodbengine就像是sqlalchemy ...

  2. jenkins api 使用

    1.  java <dependency> <groupId>com.offbytwo.jenkins</groupId> <artifactId>je ...

  3. PHP如何实现网址伪静态(转)

    Apache的 mod_rewrite是比较强大的,在进行网站建设时,可以通过这个模块来实现伪静态.主要步骤如下: 1.检测Apache是否开启mod_rewrite功能     可以通过php提供的 ...

  4. bzoj2442[Usaco2011 Open]修剪草坪——单调队列优化

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2442 考虑记录前 i 个.末尾 j 个连续选上的最大值.发现时空会爆. 又发现大量的转移形如 ...

  5. sed命令n,N,d,D,p,P,h,H,g,G,x解析

    1.sed执行模板=sed '模式{命令1;命令2}'即逐行读入模式空间,执行命令,最后输出打印出来2.为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间开端至\ ...

  6. 启动Oracle数据库时报错ORA-00119 & ORA-00132

    今天启动Oracle数据库时报错ORA-00119 & ORA-00132,找到解决方法做个记录,方便日后查看. 若是ORACLE不提示错误的话,可以自己查看ORACLE的日志文件. Orac ...

  7. JVM内存管理之GC算法精解(复制算法与标记/整理算法)

    本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算 ...

  8. FPGA时序约束一点总结

    时序约束的一点总结. 打拍.掌握好时序. 手动分配位置,这个不是一定有效. 打破层级或者物理综合,或者自动加流水等综合优化参数调整. 根据实际情况使用异步时钟策略. 换速度更快的片子. 最也进接手一个 ...

  9. Django 组件-用户认证

    用户认证 auth模块 from django.contrib import auth 1.1 .authenticate()  提供了用户认证,即验证用户名以及密码是否正确,一般需要username ...

  10. Appium ios新的定位方式FindsByIosNSPredicate (没有试 先记录在这里) 有个 driver.find_element_by_ios_uiautomation() 研究下 ios的定位

    这个定位方式需要用java-client -5.0.版本,4.x的版本没有这个定位方式 //输入账号和密码 driver.findElementByIosNsPredicate("value ...