Java基础之(九)-----Java中的IO流(一)【进阶必备】
来源:互联网 发布:安全数据防泄密厂家 编辑:程序博客网 时间:2024/06/04 18:51
Java中的IO包是java基础的核心包,掌握好IO包,对以后程序开发有很大影响。不管是桌面应用还是J2EE开发,都会频繁使用输入输出。自我感觉,输入输出就想人得呼吸一样正常,在第一遍学习java基础的时候,由于IO包中的类多而且杂,曾经学习起来感觉很吃力,特别是一个人想通过看书来解决这一章的时候要有耐心,还要有方法。这里客串一下学习java的方法。
学习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();}}}
两种流应该比较着来学习,会有很大的收货,比如说,它们都有相同的方法名,参数的形式也很相似等等。
0 0
- Java基础之(九)-----Java中的IO流(一)【进阶必备】
- java基础:IO(九)
- java基础巩固之IO(一)
- JAVA基础之IO(一、IO结构)
- java中的IO流之File类(一)
- Java基础—IO流(一)
- java基础(一)IO流操作
- Java基础——Java重点基础之IO流(一)
- Android 进阶之简述 JVM 基础(一):走进Java
- java中的io(一)
- java基础之IO流中的SequenceInputStream
- Java基础之-IO中的字节流
- java中的IO流总结(一)
- Java 学习之IO类基础(一)
- java基础之-IO流(上)
- Java基础进阶——“Java IO流之三:IO实例”
- Java基础进阶——“Java IO流之三:IO实例”
- java web进阶篇(九) Struts基础开发
- libevent 在 Android 上的一个改进
- 如何在 Ubuntu 12.04 Server 中安装图形用户界面
- 【黑马程序员】Java基础13:强大的正则
- 基于Linux的Samba开源共享解决方案测试(四)
- 业精于勤毁于嬉,行成于思毁于随
- Java基础之(九)-----Java中的IO流(一)【进阶必备】
- openLayers-Defining custom rules to style featuresl;
- 美媒惊人设想建议热火打劫 两换一交易阿西克
- 2014个人学习计划
- Arrays的addList方法
- MySQL 性能比较测试:MySQL 5.6 GA -vs- MySQL 5.5
- “ResGen.exe”已退出,代码为2 问题处理
- gerrit点击【登陆时】跳转失败,报错过多的重定向循环。
- 7种形式的Android Dialog使用举例