字节流与字符流简单操作(OutputStream、InputStream、Writer、Reader)

操作流程

  1. 使用File类打开一个文件
  2. 通过字节流或者字符流的子类。指定输出的位置。
  3. 进行读/写操作
  4. 关闭输入/出

 

字节流与字符流

在java.io包中操作文件内容主要有两大类:字节流字符流。两大类分为输入和输出操作,在字节流中输出数据主要是OutputStream完成,输入使用InputStream,在字符流冲输出主要是使用Writer类完成,输入主要是Reader完成

字节流

字节流主要是操作byte类型数据,以byte数组为准,主要操作类是OutputStream和InputSream

字节输出流:OutputStream

字节输入流:InputStream

InputStream

常用方法

Public int available():得到输入文件的大小

Public void close():关闭输入流

Public int read(bytr []b):将内容读到数组中,同时返回读入的个数

实例

InputStream是一个抽象类。要想实例化使用需要用子类FileInputStream;

InputStream output=null ;

Input=new FileInputStream(f);

实例(知道输入流大小)

 1 import java.io.File ;
 2 
 3 import java.io.InputStream ;
 4 
 5 import java.io.FileInputStream ;
 6 
 7 public class InputStreamDemo03{
 8 
 9          public static void main(String args[]) throws Exception{          // 异常抛出,不处理
10 
11                    // 第1步、使用File类找到一个文件
12 
13                    File f= new File("d:" + File.separator + "test.txt") ;         // 声明File对象
14 
15                    // 第2步、通过子类实例化父类对象
16 
17                    InputStream input = null ;        // 准备好一个输入的对象
18 
19                    input = new FileInputStream(f)  ;  // 通过对象多态性,进行实例化
20 
21                    // 第3步、进行读操作
22 
23                    byte b[] = new byte[(int)f.length()] ;                  // 数组大小由文件决定
24 
25                    int len = input.read(b) ;             // 读取内容
26 
27                    // 第4步、关闭输出流
28 
29                    input.close() ;                                                 // 关闭输出流\
30 
31                    System.out.println("读入数据的长度:" + len) ;
32 
33                    System.out.println("内容为:" + new String(b)) ; // 把byte数组变为字符串输出
34 
35          }
36 
37 };

 

 

实例(不知道输入流大小)

 1 import java.io.File ;
 2 
 3 import java.io.InputStream ;
 4 
 5 import java.io.FileInputStream ;
 6 
 7 public class InputStreamDemo05{
 8 
 9          public static void main(String args[]) throws Exception{          // 异常抛出,不处理
10 
11                    // 第1步、使用File类找到一个文件
12 
13                    File f= new File("d:" + File.separator + "test.txt") ;         // 声明File对象
14 
15                    // 第2步、通过子类实例化父类对象
16 
17                    InputStream input = null ;        // 准备好一个输入的对象
18 
19                    input = new FileInputStream(f)  ;  // 通过对象多态性,进行实例化
20 
21                    // 第3步、进行读操作
22 
23                    byte b[] = new byte[1024] ;               // 数组大小由文件决定
24 
25                    int len = 0 ;
26 
27                    int temp = 0 ;                      // 接收每一个读取进来的数据
28 
29                    while((temp=input.read())!=-1){
30 
31                             // 表示还有内容,文件没有读完
32 
33                             b[len] = (byte)temp ;
34 
35                             len++ ;
36 
37                    }
38 
39                    // 第4步、关闭输出流
40 
41                    input.close() ;                                                 // 关闭输出流\
42 
43                    System.out.println("内容为:" + new String(b,0,len)) ;         // 把byte数组变为字符串输出
44 
45          }
46 
47 };

 

OutputStream

常用方法

Public void close():关闭输出流

Public void flush():刷新缓冲区

Public void write(byte[] b):讲一个byte数组写入数据流

Public void write(byte[] b,int off,int len):将一个指定byte数组写入数据流

实例

与InputStream 相似

//实例

 1 import java.io.File ;
 2 
 3 import java.io.OutputStream ;
 4 
 5 import java.io.FileOutputStream ;
 6 
 7 public class OutputStreamDemo01{
 8 
 9          public static void main(String args[]) throws Exception{          // 异常抛出,不处理
10 
11                    // 第1步、使用File类找到一个文件
12 
13                    File f= new File("d:" + File.separator + "test.txt") ;         // 声明File对象
14 
15                    // 第2步、通过子类实例化父类对象
16 
17                    OutputStream out = null ;        // 准备好一个输出的对象
18 
19                    out = new FileOutputStream(f)  ;  // 通过对象多态性,进行实例化
20 
21                    // 第3步、进行写操作
22 
23                    String str = "Hello World!!!" ;           // 准备一个字符串
24 
25                    byte b[] = str.getBytes() ;                            // 只能输出byte数组,所以将字符串变为byte数组
26 
27                    out.write(b) ;                                                  // 将内容输出,保存文件
28 
29                    // 第4步、关闭输出流
30 
31                    out.close() ;                                                    // 关闭输出流
32 
33          }
34 
35 };

 

追加字节
 1 import java.io.File ;
 2 
 3 import java.io.OutputStream ;
 4 
 5 import java.io.FileOutputStream ;
 6 
 7 public class OutputStreamDemo03{
 8 
 9          public static void main(String args[]) throws Exception{          // 异常抛出,不处理
10 
11                    // 第1步、使用File类找到一个文件
12 
13                    File f= new File("d:" + File.separator + "test.txt") ;         // 声明File对象
14 
15                    // 第2步、通过子类实例化父类对象
16 
17                    OutputStream out = null ;        // 准备好一个输出的对象
18 
19                    out = new FileOutputStream(f,true)  ;   // 此处表示在文件末尾追加内容
20 
21                    // 第3步、进行写操作
22 
23                    String str = "Hello World!!!" ;           // 准备一个字符串
24 
25                    byte b[] = str.getBytes() ;                            // 只能输出byte数组,所以将字符串变为byte数组
26 
27                    for(int i=0;i<b.length;i++){                 // 采用循环方式写入
28 
29                             out.write(b[i]) ;         // 每次只写入一个内容
30 
31                    }
32 
33                    // 第4步、关闭输出流
34 
35                    out.close() ;                                                    // 关闭输出流
36 
37          }
38 
39 };

 

字符流

字符输出流:Writer

字符输入流:Reader

Writer

其本身也是抽象类 要想实现 使用FileWriter

常用方法

Public abstract void close():关闭输出流

Public void writer(String str):将字符串输出

实例
 1 import java.io.File ;
 2 
 3 import java.io.Writer ;
 4 
 5 import java.io.FileWriter ;
 6 
 7 public class WriterDemo01{
 8 
 9          public static void main(String args[]) throws Exception{          // 异常抛出,不处理
10 
11                    // 第1步、使用File类找到一个文件
12 
13                    File f= new File("d:" + File.separator + "test.txt") ;         // 声明File对象
14 
15                    // 第2步、通过子类实例化父类对象
16 
17                    Writer out = null ;    // 准备好一个输出的对象
18 
19                    out = new FileWriter(f)  ;        // 通过对象多态性,进行实例化
20 
21                    // 第3步、进行写操作
22 
23                    String str = "Hello World!!!" ;           // 准备一个字符串
24 
25                    out.write(str) ;                                                        // 将内容输出,保存文件
26 
27                    // 第4步、关闭输出流
28 
29                    out.close() ;                                                    // 关闭输出流
30 
31          }
32 
33 };

 

追加字符
 1 import java.io.File ;
 2 
 3 import java.io.Writer ;
 4 
 5 import java.io.FileWriter ;
 6 
 7 public class WriterDemo02{
 8 
 9          public static void main(String args[]) throws Exception{          // 异常抛出,不处理
10 
11                    // 第1步、使用File类找到一个文件
12 
13                    File f= new File("d:" + File.separator + "test.txt") ;         // 声明File对象
14 
15                    // 第2步、通过子类实例化父类对象
16 
17                    Writer out = null ;    // 准备好一个输出的对象
18 
19                    out = new FileWriter(f,true)  ;        // 通过对象多态性,进行实例化
20 
21                    // 第3步、进行写操作
22 
23                    String str = "\r\nLIXINGHUA\r\nHello World!!!" ;            // 准备一个字符串
24 
25                    out.write(str) ;                                                        // 将内容输出,保存文件
26 
27                    // 第4步、关闭输出流
28 
29                    out.close() ;                                                    // 关闭输出流
30 
31          }
32 
33 };

 

Reader

其本身也是抽象类 要想实现 使用FileReader

常用方法

Public abstract void close():关闭输出流

Public int read():读取单个字符

Public int read(char[] buf):将内容读到字符组当中,返回读入的长度

实例

// 字符组形式读取数据

 1 import java.io.File ;
 2 
 3 import java.io.Reader ;
 4 
 5 import java.io.FileReader ;
 6 
 7 public class ReaderDemo01{
 8 
 9          public static void main(String args[]) throws Exception{          // 异常抛出,不处理
10 
11                    // 第1步、使用File类找到一个文件
12 
13                    File f= new File("d:" + File.separator + "test.txt") ;         // 声明File对象
14 
15                    // 第2步、通过子类实例化父类对象
16 
17                    Reader input = null ;         // 准备好一个输入的对象
18 
19                    input = new FileReader(f)  ;   // 通过对象多态性,进行实例化
20 
21                    // 第3步、进行读操作
22 
23                    char c[] = new char[1024] ;               // 所有的内容都读到此数组之中
24 
25                    int len = input.read(c) ;             // 读取内容
26 
27                    // 第4步、关闭输出流
28 
29                    input.close() ;                                                 // 关闭输出流
30 
31                    System.out.println("内容为:" + new String(c,0,len)) ;          // 把字符数组变为字符串输出
32 
33          }
34 
35 };

 

//通过循环,判断是否读到底的形式

 1 import java.io.File ;
 2 
 3 import java.io.Reader ;
 4 
 5 import java.io.FileReader ;
 6 
 7 public class ReaderDemo02{
 8 
 9          public static void main(String args[]) throws Exception{          // 异常抛出,不处理
10 
11                    // 第1步、使用File类找到一个文件
12 
13                    File f= new File("d:" + File.separator + "test.txt") ;         // 声明File对象
14 
15                    // 第2步、通过子类实例化父类对象
16 
17                    Reader input = null ;         // 准备好一个输入的对象
18 
19                    input = new FileReader(f)  ;   // 通过对象多态性,进行实例化
20 
21                    // 第3步、进行读操作
22 
23                    char c[] = new char[1024] ;               // 所有的内容都读到此数组之中
24 
25                    int temp = 0 ;   // 接收每一个内容
26 
27                    int len = 0 ;                 // 读取内容
28 
29                    while((temp=input.read())!=-1){
30 
31                             // 如果不是-1就表示还有内容,可以继续读取
32 
33                             c[len] = (char)temp ;
34 
35                             len++ ;
36 
37                    }
38 
39                    // 第4步、关闭输出流
40 
41                    input.close() ;                                                 // 关闭输出流
42 
43                    System.out.println("内容为:" + new String(c,0,len)) ;          // 把字符数组变为字符串输出
44 
45          }
46 
47 };

 

区别

字符流有缓存,字节流没有缓存区

字节流即使没有关闭也可以

 

posted @ 2014-10-14 22:18  Dream露  阅读(509)  评论(0编辑  收藏  举报