
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 }
浙公网安备 33010602011771号