FileIO文件读写相关知识, FileInputStream、InputStreamReader和BufferedReader几种读取文件的区别

InputStream、OutputStream

处理字节流的抽象类

InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.

OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.

 

2.InputStreamReader  OutputStreamWriter

处理字符流的抽象类

InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.

OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流.

 

3.BufferedReader BufferedWriter

BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,

从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

BufferedWriter  由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

 

InputStream能从來源处读取一個一個byte,
所以它是最低级的,

例:

 
  1. import Java.io.*;

  2. public class Main {

  3. public static void main(String[] args) {

  4.  
  5. try {

  6. FileInputStream fis=new FileInputStream("d://desktop//test.txt");

  7. int i;

  8.  
  9. try {

  10. while((i=fis.read()) != -1){

  11. System.out.println(i);

  12. }

  13. /*假設test.txt檔裡頭只有一個文字 "陳" ,且其編碼為 utf8

  14. * 輸出

  15. * 233

  16.  
  17.  
  18. */

  19. } catch (IOException e) {

  20. // TODO Auto-generated catch block

  21. e.printStackTrace();

  22. }

  23.  
  24.  
  25. } catch (FileNotFoundException e) {

  26. // TODO Auto-generated catch block

  27. e.printStackTrace();

  28. }

  29.  
  30. }

  31. }

 InputStreamReader
 InputStreamReader封裝了InputStream在里头,
 它以较高级的方式,一次读取一个一个字符,
 下例是假设有一个编码为utf8的文档,

 其內容只有一个中文字 "陳"

 
  1. import java.io.*;

  2. public class Main {

  3. public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {

  4.  
  5. FileInputStream fis=new FileInputStream("d://desktop//test.txt");

  6. try {

  7. InputStreamReader isr=new InputStreamReader(fis,"utf8");

  8. int i;

  9. while((i=isr.read()) != -1){

  10. System.out.println((char)i); //輸出 陳

  11. }

  12. } catch (Exception e) {

  13. // TODO Auto-generated catch block

  14. e.printStackTrace();

  15. }

  16.  
  17. }

  18. }

BufferedReader
BufferedReader则是比InputStreamReader更高级,
它封裝了StreamReader类,

一次读取取一行的字符

 
  1. import java.io.*;

  2. public class Main {

  3. public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {

  4.  
  5. FileInputStream fis=new FileInputStream("d://desktop//test.txt");

  6.  
  7. try {

  8. InputStreamReader isr=new InputStreamReader(fis,"utf8");

  9. BufferedReader br=new BufferedReader(isr);

  10.  
  11. String line;

  12. while((line=br.readLine()) != null){

  13. System.out.println(line);

  14. }

  15. } catch (Exception e) {

  16. // TODO Auto-generated catch block

  17. e.printStackTrace();

  18. }

  19.  
  20. }

 

 

 

 

文件读写和复制:

 

 

package IO;

import org.junit.Test;

import java.io.*;
import java.nio.charset.Charset;


package IO;

import org.junit.Test;

import java.io.*;
import java.nio.charset.Charset;

public class FileIO {

    @Test
    public void readFile(){
        File file =new File("/Users/cmq/Downloads/soft/安装包.txt");

        try{
            FileInputStream fileInputStream=new FileInputStream(file);
            InputStreamReader inputStream=new InputStreamReader(fileInputStream, "gbk");//字节流转换成字符流
            BufferedReader bufferedReader=new BufferedReader(inputStream);
            String line=null;
           while((line=bufferedReader.readLine())!=null){
               System.out.println(line);
           }
            fileInputStream.close();
           inputStream.close();
            bufferedReader.close();
        }catch (Exception e){
          e.printStackTrace();
        }

    }



    @Test
    public void writeFile(){
        File file =new File("/Users/cmq/Downloads/soft/安装包.txt");

        try{
            FileInputStream fileInputStream=new FileInputStream(file);
            InputStreamReader inputStream=new InputStreamReader(fileInputStream, "gbk");//字节流转换成字符流
            BufferedReader bufferedReader=new BufferedReader(inputStream);
            String line=null;

            File file2=new File("/Users/cmq/Downloads/soft/安装包2.txt");
            FileOutputStream fileOutputStream=new FileOutputStream(file2);
            OutputStreamWriter outputStreamWriter=new OutputStreamWriter(fileOutputStream);
            BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);

            while((line=bufferedReader.readLine())!=null){
                bufferedWriter.write(line+"\n");
            }
            bufferedWriter.flush();
            fileInputStream.close();
            inputStream.close();
            bufferedReader.close();


            outputStreamWriter.close();
            bufferedWriter.close();

        }catch (Exception e){
            e.printStackTrace();
        }

    }

    //writeFile改造

    @Test
    public void writeFile2(){
        File file =new File("/Users/cmq/Downloads/soft/安装包.txt");

        try{
            FileInputStream fileInputStream=new FileInputStream(file);
            InputStreamReader inputStream=new InputStreamReader(fileInputStream, "gbk");//字节流转换成字符流
            BufferedReader bufferedReader=new BufferedReader(inputStream);
            String line=null;

            File file2=new File("/Users/cmq/Downloads/soft/安装包2.txt");
            FileWriter fileWriter=new FileWriter(file2);
            BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);

            while((line=bufferedReader.readLine())!=null){
                bufferedWriter.write(line+"\n");
            }
            bufferedWriter.flush();
            fileInputStream.close();
            inputStream.close();
            bufferedReader.close();


            fileWriter.close();
            bufferedWriter.close();

        }catch (Exception e){
            e.printStackTrace();
        }

    }





}
   
  1. }

你可能感兴趣的:(原创,java)