草样年华--跑掉的青春

博客园 首页 新随笔 联系 订阅 管理

InputStream和Reader是所有输入流的基类,其典型实现是FileInputStream和FileReader

下面的代码是字节输入流FileInputStream读取文件内容的3中方式:

 1 public void IOTest() throws Exception {
 2 
 3         //1、创建一个字节输入流
 4         InputStream inputStream = new FileInputStream("aaa.txt");
 5         
 6         //2读取文件内容
 7         // 2.1一次读取一个字节,不建议这么读,效率太低
 8         int result = inputStream.read();
 9         while(result !=-1){
10             System.out.print((char)(result));
11             result = inputStream.read();
12         }
13 
14         //2.2一次读取一个数组:一组字节
15         byte[] buffer = new byte[10];
16         int len = 0;
17         //返回值为一次读取的字节数,若为-1则表示读到文件尾
18         while((len = inputStream.read(buffer)) != -1){
19             for(int i = 0;i<len;i++){
20                 System.out.print((char)buffer[i]);
21             }
22         }
23 
24         //2.3把字节读到字节数组中的一个连续空间
25         byte[] result = new byte[1024];
26         inputStream.read(result,10,inputStream.available());
27 
28 
29         inputStream.close();
30 
31     }

 同样字符流FileReader读取文件内容也有3种方法:

 1  @Test
 2     public void readerTest() throws IOException {
 3         Reader reader = new FileReader("aaa.txt");
 4         char[] buffer = new char[10];
 5         int len = 0;
 6         while((len = reader.read(buffer))!= -1){
 7             for(int i = 0;i<len;i++){
 8                 System.out.print(buffer[i]);
 9             }
10         }
11 
12         reader.close();

 使用字节输入输出流实现文件复制

 1 @Test
 2     public void copyTestByInputAndOutput() throws Exception {
 3 
 4         //1.创建定位到文件的字节输入流
 5         InputStream in = new FileInputStream("abcde.txt");
 6 
 7         //2.创建定位到文件的字节输出流
 8         OutputStream out = new FileOutputStream("abcde2.txt");
 9 
10 
11         //3.创建byte数组
12         byte[] buffer = new byte[1024 * 10];
13         int len = 0;
14 
15         //4.读取文件,写入另一个文件
16         while((len = in.read(buffer))!= -1){
17             out.write(buffer,0,len);
18         }
19 
20         //4.关闭资源
21         out.close();
22         in.close();
23     }

使用字符输入输出流实现文件复制

 1 public void copyTestByReaderAndWriter()throws IOException{
 2         Reader reader = new FileReader("abcde.txt");
 3         Writer writer = new FileWriter("abcde2.txt");
 4 
 5         char[] buffer = new char[10];
 6         int len = 0;
 7 
 8         while((len = reader.read(buffer))!= -1){
 9             writer.write(buffer,0,len);
10         }
11 
12         reader.close();
13         writer.close();
14     }

使用缓冲流实现文件复制

 1 @Test
 2     public void testBufferedReaderAndBufferedWriter()throws IOException{
 3 
 4         //1.创建输入输出流,BufferedReader和BufferedWriter是一个包装流,也就是在
 5         //创建它们时,必须传入Reader和Writer
 6         Reader in = new FileReader("abcde.txt");
 7         BufferedReader bufferedReader = new BufferedReader(in);
 8 
 9         Writer out = new FileWriter("abcde3.txt");
10         BufferedWriter bufferedWriter = new BufferedWriter(out);
11 
12         //2.进行读写操作,缓冲流可以每次读取一行,效率相对较高
13         String str = null;
14         int i =0;
15         while((str = bufferedReader.readLine())!= null){
16             if( i != 0){
17                 bufferedWriter.write("\n");
18             }
19             bufferedWriter.write(str);
20             i = i +1;
21         }
22 
23         //3.关闭包装流,包装流内部会关闭节点流
24         bufferedReader.close();
25         bufferedWriter.close();
26     }
27 
28     @Test
29     public void testBufferedInputStreamAndBufferedOutStream() throws IOException {
30         InputStream in = new FileInputStream("abcde.txt");
31         BufferedInputStream bufferedInputStream = new BufferedInputStream(in);
32 
33         OutputStream out = new FileOutputStream("abcde5.txt");
34         BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out);
35 
36         byte[] buffer = new byte[1024];
37         int len = 0;
38         while((len = bufferedInputStream.read())!= -1){
39             bufferedOutputStream.write(buffer,0,len);
40         }
41 
42         bufferedInputStream.close();
43         bufferedOutputStream.close();
44     }

转换流,只能是字节转字符,因为字节流使用于所有文件,字符流只适用于文本文件当获取到的流是一个字节流,但是这个流对应的是一个字符文件,可以用转换流进行转换,操作起来更方便

 1 @Test
 2     public void testInputStreamReader()throws IOException{
 3         //1.创建字节流
 4         InputStream in = new FileInputStream("abcde.txt");
 5 
 6         //2.将字节流转换成字符流
 7         Reader reader = new InputStreamReader(in);
 8 
 9         //3.将字符流转换成带缓冲的字符流
10         BufferedReader  bufferedReader = new BufferedReader(reader);
11 
12         String str = null;
13         while((str = bufferedReader.readLine())!= null){
14             System.out.println(str);
15         }
16 
17         //4.关闭流
18         in.close();
19         reader.close();
20         bufferedReader.close();
21 
22     }
23 
24     //实现文件复制
25     @Test
26     public void testOutputStreamWriter()throws IOException{
27         InputStream in = new FileInputStream("abcde.txt");
28         Reader reader = new InputStreamReader(in);
29         BufferedReader bufferedReader = new BufferedReader(reader);
30 
31         OutputStream out = new FileOutputStream("abcde6.txt");
32         Writer writer = new OutputStreamWriter(out);
33         BufferedWriter bufferedWriter= new BufferedWriter(writer);
34 
35         String str = null;
36         int i = 0;
37         while((str = bufferedReader.readLine())!= null){
38             if(i != 0){
39                 bufferedWriter.write("\n");
40             }
41             i = i + 1;
42             bufferedWriter.write(str);
43 
44         }
45 
46         in.close();
47         reader.close();
48         bufferedReader.close();
49 
50         bufferedWriter.close();
51         writer.close();
52         out.close();
53     }

 

posted on 2016-05-14 15:46  草样年华--跑掉的青春  阅读(146)  评论(0)    收藏  举报