java io流

字节流:可以读写所用类型的文件
字符流:只能读写纯文本文件
所有缓冲中的数据都必须加flush();强制读出 否则会缺少或增多

  • 输入流读取文件

FileInputStream文件输入流

    try {
            FileInputStream fis = new FileInputStream("text.txt");
            byte input[] =new byte[20];//创建字节数组指定长度
            fis.read(input);
            String inputString=new String(input);
            System.out.println(inputString);
            fis.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

FileOutputStream文件输出流

    try {
        FileOutputStream fos =new FileOutputStream("textw.txt");
        String  outString ="write 123456写出数据";
      //  byte b=new Byte(outString);
        byte[] b=outString.getBytes("UTF-8");
        fos.write(b);

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }  //参数为相对路径
 catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

利用FileInputStream,FileOutputStream 拷贝文件

//将文件"ani.gif"拷贝到"ani_new.gif"
try {
            FileInputStream fis = new FileInputStream("ani.gif");
            FileOutputStream fos = new FileOutputStream("ani_new.gif");

            byte[] input = new byte[50];
            while (fis.read(input) != -1) {//把文件读到字节数组中 
                fos.write(input);//把字节数组写到“aniw.gif” 文件中

            }
            fis.close();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

带缓冲的输入输出流BufferedInputStream ,BufferedOutputStream

//将文件movie.mp4拷贝到movie_new.mp4
        try {
            FileInputStream fis = new FileInputStream("movie.mp4");
            BufferedInputStream bis = new BufferedInputStream(fis,10000);// 将输入流包装成缓冲字节流   可以加快读写速度 ,第二个参数是指定缓区的大小 但是要比下面字节数组大   缓冲区的大小设置合适设置可以加快数据读写
            FileOutputStream fos=new FileOutputStream("movie_new.mp4");
            BufferedOutputStream bos=new BufferedOutputStream(fos,10000);

            byte[] input = new byte[100];//把字节数组改大   那么读写次数少了 也就是速度变快了

            int count=0;
            while ( bis.read(input) !=-1) {
                bos.write(input);
            count++;

            }
            bis.close();//先打开的要后关闭 ,后打开的要先关闭
            fis.close();
            bos.close();
            fos.close();
            System.out.println("读取了:"+count+"次");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
  • 字符输入输出流

    InputStreamReader 将字节流转成字符流

    try {

        FileInputStream fis=new FileInputStream("java.txt");
        InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流

        char input[]=new char[100];//字符数组
        int L=0;
        //这个读取出来的数据可能更源文件不一样 ,读出的java在最后的时候可能会多出几个字,也可能会少几个字,因为读的时候不是刚好到100个字节
        /*while(isr.read(input) !=-1){
            System.out.println(input);
        }*/

        //这个就可以完整读出来
        while((L=isr.read(input)) !=-1){
            System.out.println(new String(input, 0, L));
        }

        isr.close();
        fis.close();


    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

利用InputStreamReader和OutputStreamWriter 拷贝文件

//将文件java.txt拷贝到java_new.txt 中
    try {

            FileInputStream fis=new FileInputStream("java.txt");
            FileOutputStream fos=new FileOutputStream("java_new.txt");
            InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流
            OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");

            char input[]=new char[100];//字符数组
            int L=0;

            //这个就可以完整读出来
            while((L=isr.read(input)) !=-1){
                //System.out.println(new String(input, 0, L));
                osw.write(input, 0, L);
            }

            isr.close();
            fis.close();
            osw.close();
            fos.close();


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

带有缓冲的字符流 拷贝文件

//将文件"java.txt" 拷贝到"java_new.txt"
    try {

            FileInputStream fis=new FileInputStream("java.txt");
            FileOutputStream fos=new FileOutputStream("java_new.txt");
            InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流
            OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");

            BufferedReader br=new BufferedReader(isr);//带有缓冲的输入流
          //  BufferedWriter bw=new BufferedWriter(osw);//带有缓冲的输出流

            PrintWriter pw=new PrintWriter(osw,true);//字符打印输出流  第二个参数跟调用flush作用是一样的       
            String input;

            //这个就可以完整读出来
            while((input=br.readLine())!=null){
            //  bw.write(input);//所读取的数据会显示在一行中
            pw.println(input);//每读取一行就会自动换行
            }
        //  bw.flush(); bw.close();
            pw.flush();// 缓冲的数据有时候是不会被读取   flush()将缓冲的数据强制输出
            pw.close();
            isr.close();
            fis.close();
            osw.close();
            fos.close();


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

FileReader BufferedReader ,FileWriter BufferedWriter

//将文件"java.txt" 拷贝到"java_new.txt"
    try {
            FileReader  fr = new FileReader("java.txt");
            BufferedReader br=new BufferedReader(fr);

            FileWriter fw=new FileWriter("java_new.txt");
            BufferedWriter bw=new BufferedWriter(fw);
            String line;
            while ((line=br.readLine())!=null) {
                bw.write(line+"\n");

            }
            bw.flush();//所有带有缓冲的流都要强制输出
            bw.close();
            fw.close();
            br.close();
            fr.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值