Java基础之(九)-----Java中的IO流(一)【进阶必备】
2014-01-06 14:34
351 查看
Java中的IO包是java基础的核心包,掌握好IO包,对以后程序开发有很大影响。不管是桌面应用还是J2EE开发,都会频繁使用输入输出。自我感觉,输入输出就想人得呼吸一样正常,在第一遍学习java基础的时候,由于IO包中的类多而且杂,曾经学习起来感觉很吃力,特别是一个人想通过看书来解决这一章的时候要有耐心,还要有方法。这里客串一下学习java的方法。
学习Java方法体会。
网上很多人说java基础就是几个核心包,掌握了这几个核心包(lang,IO,sql,util等)就等于掌握好了java基础。
我觉得,在学习这些包之前,要弄清这些包的结构,因为java是面向对象的语言,所以,java会把关系密切的类放在同一个包,同理,同一个包里面的类必然有联系,比如Exception的子类分为RuntimeException和Exception的直接子类,这就是两条线,沿着这两条线索学习,就会感觉很有条理。方法就介绍到这。这次是IO包的复习。
代码示例:
代码示例:
至此,对于字符的读写操作介绍完了,主要是四个类的使用,先将四个类一起使用,实现一个文件的复制。
两种流应该比较着来学习,会有很大的收货,比如说,它们都有相同的方法名,参数的形式也很相似等等。
学习Java方法体会。
网上很多人说java基础就是几个核心包,掌握了这几个核心包(lang,IO,sql,util等)就等于掌握好了java基础。
我觉得,在学习这些包之前,要弄清这些包的结构,因为java是面向对象的语言,所以,java会把关系密切的类放在同一个包,同理,同一个包里面的类必然有联系,比如Exception的子类分为RuntimeException和Exception的直接子类,这就是两条线,沿着这两条线索学习,就会感觉很有条理。方法就介绍到这。这次是IO包的复习。
基于字符的IO操作
基于字符的IO操作指的是操作对象是以字符为基本单位。常见得有对于文本的读写等。Reader
Rader类是所有读取字符类的父类。它的直接父类是Object类。它定义了一系列的方法来对文件进行读操作,关闭流等方法。一般不会使用Reader的实例来读取文件,而是使用Reader类得子类的实例读取文件。它的直接实现子类有FileReader和BufferedReader等。FileReader
FileReader是Reader的直接子类,拥有父类的对文件进行操作的方法。提供两个重载的read方法,一个read方法无参,返回读取到字符的码值,另外一个read方法用字符数组作为参数,返回读取到的字符数。对于小型文件,一般会直接用FilrrReader来读,当文件较大时,一般会套上缓冲流来加大效率。BufferedReader
BufferedReader也是Reader类直接子类。在它底层定义了一个数组,并且重写了read方法,增加了readLine方法,实现缓冲的原理是:将读取到的数据先放入到数组保存,然后再从数组中读取存入的数据。有点象FileReader有参方法,从而实现缓冲的功能。readLine方法会直接读取文本的一行,但是不会读到换行符。代码示例:
package BufferedReader; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class BufferedReaderDemo { public static void main(String[] args) { try { BufferedReader bf =new BufferedReader(new FileReader("copyText.txt")); char[] ch=new char[1024]; int len=0; String s =null; while((s=bf.readLine())!=null) { System.out.println(s); } bf.close(); }catch(IOException e) { e.printStackTrace(); } } }
Writer
在介绍读取数据之后,在介绍怎么写入数据。和Reader一样,Writer是所有写字符类的父类,它定义了一系列对文件进行写操作的方法。一般也不会使用Writer来写入数据。下面介绍FileWriter。FileWriter
FileWriter是Writer类的直接子类,它重载了write方法来对文件进行写操作,可以写入字符数组,字符串,单个字符。对于小型文件,直接使用此类,但是对于大型文件,就需要对该类实现缓冲。BufferedWriter
BufferedWriter是包装流,用法和BufferedReader用法大同小异。代码示例:
package BufferedWriter; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class BufferedWriterDemo { public static void main(String[] args) { try { //创建一个带缓冲的字符流,并且指定数据源 BufferedWriter bf=new BufferedWriter(new FileWriter("IO流.txt")); //写入数据 bf.write("abcde"); bf.newLine(); bf.write("haha"); //刷出缓冲出的数据 bf.flush(); //关闭缓冲区,注意:这里只用关闭包装流 bf.close(); }catch(IOException e) { e.printStackTrace(); } } }
至此,对于字符的读写操作介绍完了,主要是四个类的使用,先将四个类一起使用,实现一个文件的复制。
package test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyTest { /** * @param args */ public static void main(String[] args) { try { copyText(); }catch(IOException e) { e.printStackTrace(); } } public static void copyText() throws IOException { BufferedReader bf=new BufferedReader(new FileReader("copyText.txt")); BufferedWriter bw=new BufferedWriter(new FileWriter("copyText2.txt")); int h=0; char[] ch=new char[1024]; while((h=bf.read(ch))!=-1) { bw.write(ch,0,h); } bf.close(); bw.flush(); bw.close(); } }
基于字节的IO操作
基于字节的IO操作与基于字符的操作大同小异,不过最根本的是操作对象不同。一个是字节,一个是字符。在程序设计过程中,只需要把对象由char改为byte,很多情况都和字符操作相似。它的主要的四个类分别如下:InputStream
OutputStream
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
对于这些类的用法没有特别的新意,只用代码介绍一下:package snippet; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyMp3Test { /** * 一个使用字节流来赋值MP3 * 的程序 */ public static void main(String[] args) { try { FileInputStream in =new FileInputStream("d:\\陶喆 - 流沙.mp3"); FileOutputStream out= new FileOutputStream("d:\\陶喆 - 流沙1.mp3"); BufferedInputStream bf=new BufferedInputStream(in); BufferedOutputStream bp=new BufferedOutputStream(out); int h=0; byte[] b =new byte[1024]; while((h=bf.read(b))!=-1) { bp.write(b); } bf.close(); bp.flush(); bp.close(); }catch(IOException e) { e.printStackTrace(); } } }
两种流应该比较着来学习,会有很大的收货,比如说,它们都有相同的方法名,参数的形式也很相似等等。
相关文章推荐
- Java基础进阶——“Java IO流之三:IO实例”
- Java基础进阶——“Java IO流”
- Java基础进阶——“Java IO流之二:细说流的分类”
- Java基础进阶——“Java IO流之三:IO实例”
- Java基础进阶_day12_(其他IO流)
- Java基础知识强化之IO流笔记58:内存操作流
- 黑马程序员——Java基础--------IO流(三)
- Java基础——IO流
- Java基础知识强化之IO流笔记60:打印流 之 改进复制文本文件的案例
- java基础之序列化(IO流)
- 黑马程序员----Java基础基础之IO流
- java基础--IO流(下)字节流
- 黑马程序员---java基础---5IO流
- Java基础之File类与IO流(二)
- 黑马程序员——java基础——IO流中的其他常用类
- 零基础写Java知乎爬虫之进阶篇
- 黑马程序员JAVA基础-IO流
- java基础之IO转换流--OutputStreamWriter(字符流通往字节流,可以指定字符编码的IO流对象)
- JAVA进阶7.1——IO流概述
- 黑马程序员--java基础:字符IO流