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 }
示例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 }
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 }
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 }
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 }
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("\n"); 19 } 20 writer.write(str); 21 i++; 22 } 23 24 //3.关闭缓冲输入流,缓冲输出流。直接关闭包装类,函数内部自动关闭节点流 25 bufferedReader.close(); 26 bufferedWriter.close(); 27 }
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 }
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("\nIt is a sunny day\n"); 21 randomAccessFile.write(buffer); 22 23 //3.关闭文件流 24 randomAccessFile.close(); 25 }