IO流

1.InputStream 

  InputStream是一个抽象类,是字节流的基类。

示例1:

 1 public void testInputSteam() throws IOException
 2     {
 3         //1.创建文件流
 4         InputStream input=new FileInputStream("abc.txt");
 5         
 6         //2.读取文件内容
 7         byte [] buffer=new byte[10];
 8         int len=0;
 9         //read(byte[] b)返回每次读取的字节个数。如果到达流的末尾,则返回-1;
10         while ((len=input.read(buffer))!=-1)
11         {
12             for(int i=0;i<len;i++)
13             {
14                 System.out.print((char)buffer[i]);
15             }
16             
17         }
18 
19         //3.关闭文件流,这一步千万别忘记。程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源。
20         input.close();
21     }
View Code

示例2:

 1 public void testInputSteam2() throws IOException
 2     {
 3         //1.创建文件流
 4         InputStream input=new FileInputStream("abc.txt");
 5         
 6         //2.读取文件内容
 7         byte [] buffer=new byte[1024*10];
 8 
 9         //read(byte[] b, int off, int len):从off位置开始读取len长度到b数组中
10         input.read(buffer, 0, input.available());
11         for(int i=0;i<buffer.length;i++)
12             System.out.print((char)buffer[i]);
13 
14         //3.关闭文件流
15         input.close();
16     }
View Code

2.Reader

  Reader是一个抽象类,是字符流的基类。

示例1:

 1         public void testReader() throws IOException
 2     {
 3         //1.创建文件流
 4         Reader reader=new FileReader("hello.txt");
 5         
 6         //2.读取文件内容
 7         char [] buffer=new char[10];
 8         int len=0;
 9         while( (len=reader.read(buffer))!=-1 )
10         {
11             for(int i=0;i<len;i++)
12             {
13                 System.out.print(buffer[i]);
14             }
15         }
16         
17         //3.关闭文件流
18         reader.close();        
19     }    
View Code

 3.OutputStream

示例1:

 1         /*
 2      * 将文件a的内容复制到文件b中
 3      */
 4     @Test
 5     public void testOutputStream() throws IOException
 6     {
 7         /*1.新建一个指向文件a的输入流*/
 8         InputStream in=new FileInputStream("abc.txt");
 9         /*2.新建一个指向文件b的输出流*/
10         OutputStream out=new FileOutputStream("abc2.txt");
11         /*3.将从文件a读取的内容输出到文件b中*/
12         byte [] buffer=new byte[1024 *10];    
13         int len=0;
14         while( (len=in.read(buffer)) !=-1)
15         {
16             out.write(buffer, 0, len);
17         }
18         /*4.关闭输入流,输出流*/
19         in.close();
20         out.close();
21     }    
View Code

4.Writer

示例1:

 1         /*
 2      * 利用字符流完成两个文件的复制
 3     */
 4     @Test
 5     public void testWriter() throws IOException
 6     {
 7         //新建输入流
 8         Reader reader=new FileReader("abc.txt");
 9         //新建输出流
10         Writer writer=new FileWriter("abc3.txt");
11         
12         char [] buffer=new char[10];
13         int len=0;
14         //从a文件中读出数据放入缓冲数组中,再将该字符数组写入到b文件
15         while((len=reader.read(buffer)) !=-1)
16         {
17             //注意使用的方法是wirte(char[] b,int offset,int len),而不是wirte(char[] b),否则最后一次写入是会超出
18             writer.write(buffer, 0, len);
19         }
20         //关闭输入流,输出流
21         reader.close();
22         writer.close();
23         
24     }    
View Code

5.BufferedReader和BufferedWriter

示例1:

 1 public void testBufferedReaerAndBufferedWriter() throws IOException
 2     {
 3         //1.新建缓冲输入流,缓冲输出流
 4         Reader reader=new FileReader("abc.txt");
 5         //BufferedReader(Reader in):BufferedReader对象需要通道一个Reader对象创建
 6         BufferedReader bufferedReader=new BufferedReader(reader);
 7         
 8         Writer writer=new FileWriter("abc4.txt");
 9         BufferedWriter bufferedWriter=new BufferedWriter(writer);
10         //2.利用readLine()方法读取文件的中一行,并写入输出文件中,直至文件结束。
11         String str=null;
12         int i=0;
13         while( (str=bufferedReader.readLine()) != null)
14         {
15             //注意:readLine()读取每一行的字符内容不包括换行符,所以使用该方法要记得手动加换行符
16             if(i!=0)
17             {
18                 writer.write("
");
19             }
20             writer.write(str);
21             i++;
22         }
23         
24         //3.关闭缓冲输入流,缓冲输出流。直接关闭包装类,函数内部自动关闭节点流
25         bufferedReader.close();
26         bufferedWriter.close();
27     }
View Code

6.BufferedInputStream和BufferedOutputStream

示例1:

 1 public void testBufferedInputStreamAndBufferedOutputStream() throws IOException
 2     {
 3         InputStream in=new FileInputStream("abc.txt");
 4         BufferedInputStream bufferedInputStream=new BufferedInputStream(in);
 5         
 6         OutputStream out=new FileOutputStream("abc5.txt");
 7         BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(out);
 8         
 9         byte[] buffer=new byte[10];
10         int len=0;
11         while( (len=bufferedInputStream.read(buffer))!=-1)
12         {
13             bufferedOutputStream.write(buffer, 0, len);
14         }
15         
16         bufferedInputStream.close();
17         bufferedOutputStream.close();
18     }
View Code

7.InputStreamReader和InputStreamWriter 转换流

InputStreamReader:将输入字节流转换为字符流

InputStreamWriter:将输出字节流转换为输出字符流

8.RandomAcessFile

RandomAcessFile类既可读又可写。RandomAcessFile支持随机访问的模式,程序可以通过文件指针跳到任意位置读写。所以如果需要处理比较复杂的文件操作时,可以使用该类比较方便

是独立于其他IO流的,直接继承于Object类。

示例1:

 1     /*
 2      * 在文件的第二行添加It is a sunny day!
 3     */
 4     @Test
 5     public void testRandomAccess() throws IOException
 6     {
 7         //1.RandomAccessFile(File file, String mode),创建从中读取和向其中写入(可选)的随机访问文件流
 8         RandomAccessFile randomAccessFile=new RandomAccessFile("abc.txt", "rw");
 9         
10         //2.读取文件内容,添加新行
11         //先读取第一行,然后将后面部分读入到一个数组中,添加新行,再把原文件第二行至末尾放入新文件中(只适用于文件不大的情况)
12         //2.1 先读取第一行
13         String line=randomAccessFile.readLine();
14         byte[] buffer=new byte[1024];
15         //2.2 将第一行后面的内容读取到数组中
16         randomAccessFile.read(buffer);
17         //2.3 将文件指针重新定位到文件第一行后面
18         randomAccessFile.seek(line.length());
19         //2.4 写入新内容和剩下部分
20         randomAccessFile.writeBytes("
It is a sunny day
");
21         randomAccessFile.write(buffer);
22         
23         //3.关闭文件流
24         randomAccessFile.close();        
25     }
View Code
原文地址:https://www.cnblogs.com/ITyannic/p/8075985.html