Java文件读写操作(FileInputStream、FileReader、BufferedReader)

1.字节流和字符流选择
字节流:字节流读取的时候,读到一个字节就返回一个字节; 主要用于读取图片,MP3,AVI视频文件。
字符流:字符流使用了字节流读到一个或多个字节,如读取中文时,就会一次读取2个字节。只要是处理纯文本数据,就要优先考虑使用字符流。

2.处理流和节点流
节点流:和操作系统紧密连接的流。该层的与文件输入输出的操作都比较原始,没有进过优化,功能比较单一。
(FileReader,FileWriter和FileInputStream,FileOutStream都是输入节点流。)

处理流:该层流是对节点流的封装,对节点流中进行优化,加入缓冲器,提供更加丰富的API等。我们一般都使用处理流,在创建处理流对象的时候一般都需要节点流对象作为其构造参数。
(BufferedInPutStream,BufferedOutPutStream和BufferedWriter,BufferedReader)


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class File_Operater {


    /*
     * 按字节(byte)读写
     * 
     */
    public static void FileInputStream_demo(String src,String dest) throws IOException{
        FileInputStream in=new FileInputStream(src);

        File file=new File(dest);
        if(!file.exists()) file.createNewFile();
        FileOutputStream out=new FileOutputStream(file);

       // read()            从此输入流中读取一个数据字节。 
       // read(byte[] b)    从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 

//      int c;
//      while((c=in.read())!=-1){
//           out.write(c);        
//      }

        int c;
        byte buffer[]=new byte[1024];
        while((c=in.read(buffer))!=-1){
            for(int i=0;i<c;i++) out.write(buffer[i]); 
            //out.write(buffer,0,c);    //0到c的长度
        }
        //不用out.write(buffer),可能存在buffer只用了一半,后一半输出了未知东西

        in.close();
        out.close();
    }

    /*
     * 按字符(char)读写
     * 
     */
    public static void FileReader_demo(String src,String dest) throws IOException{
        FileReader in = new FileReader(src);  

        File file = new File(dest);  
        if (!file.exists())  file.createNewFile(); 
        FileWriter out= new FileWriter(file);


        char[] buffer = new char[3];
        int c = 0;
        while ((c = in.read(buffer)) != -1) {  
            out.write(buffer,0,c);  
        }  
        in.close();
        out.close();
    }

    /*
     * 按字符(char)读写,或者字符串(String)
     * 
     */
    public static void BufferedReader_demo(String src,String dest) throws IOException{

        File file_in = new File(src);
        BufferedReader in=new BufferedReader(new FileReader(file_in));

        File file_out = new File(dest);  
        if (!file_out.exists())  file_out.createNewFile();
        BufferedWriter out=new BufferedWriter(new FileWriter(file_out));

        //read()        读取单个字符。
        //readLine()    读取一个文本行。

        char[] buffer = new char[3];
        int c = 0;
        while ((c = in.read(buffer)) != -1) {  
            out.write(buffer,0,c);  
        }  

//        String read;
//        while ((read = in.readLine()) != null) {  
//            out.write(read);  
//        }

        in.close();
        out.close();
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        String src="1.txt"; 
        String out1="2.txt";
        String out2="3.txt"; 
        String out3="4.txt"; 

        FileInputStream_demo(src,out1);
        FileReader_demo(src,out2);
        BufferedReader_demo(src,out3);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值