文件字节流

FileInputStream通过字节的方式读取文件,适合读取所有类型文件(图像、视频、文本文件等)。Java也提供了FileReader专门读取文本文件。

 

FileOutputStream 通过字节的方式写数据到文件,适合所有类型文件。Java也提供了FileWriter专门写入文本文件。 

【示例1】将文件内容读取到程序中 

import java.io.*;

 

public class Demo02 {

    public static void main(String[] args) {

        FileInputStream  fis =null;

        try {

             fis = new    FileInputStream("d:/a.txt");  //内容是:abc

             StringBuilder sb = new StringBuilder();

             int temp = 0;

             while((temp=fis.read())!=-1){

                 sb.append((char)temp);

             }

             System.out.println(sb); 

        } catch (Exception e) {

             e.printStackTrace();

        }finally{

             try{

                 if(fis!=null){

                     fis.close();

//流对象,使用完后必须关闭!!这种写法,保证了即使遇到异常情况,也会关闭流对象。

                  }  

             }catch(IOException e){

                 e.printStackTrace();

             }

        }

    }

}

【示例2将字符串/字节数组的内容写入到文件中

public class Demo03 {

    public static void main(String[] args) {

        FileOutputStream fos = null;

        String string = "北京尚学堂欢迎您!";

        try {

             fos = new FileOutputStream("d:/a.txt",true);

//true表示内容会追加到文件末尾;false表示重写整个文件内容。

             fos.write(string.getBytes());

            

        } catch (Exception e) {

             e.printStackTrace();

        }finally{

             try {

                 if(fos!=null){

                     fos.close();

                 }

             } catch (IOException e) {

                 e.printStackTrace();

             }

        }

    }

}

【示例3】利用文件流实现文件的复制功能

public class Demo04 {

   

    public static void main(String[] args) {

        copyFile("d:/a.txt", "d:/b.txt"); //a.txt内容拷贝到b.txt

    }

 

    /**

     * src文件的内容拷贝到dec文件

     * @param src    源文件

     * @param dec    目标文件

     */

    static void copyFile(String src, String dec) {

        FileInputStream fis = null;

        FileOutputStream fos = null;

        byte[] buffer = new byte[1024]; // 为了提高效率,设置缓存数组!

        int temp = 0;

        try {

             fis = new FileInputStream(src);

             fos = new FileOutputStream(dec);

             while ((temp = fis.read(buffer)) != -1) {

                 fos.write(buffer, 0, temp);

             }

        } catch (Exception e) {

             e.printStackTrace();

        } finally {

             try {

                 if(fos!=null){

                     fos.close();

                 }

             } catch (IOException e) {

                 e.printStackTrace();

             }

             try {

                 if(fis!=null){

                     fis.close();

                 }

             } catch (IOException e) {

                 e.printStackTrace();

             }

        }

    }

}

字节数组流

ByteArrayInutStreamByteArrayOutputStream经常用在需要流和数组之间转化的情况!

说白了,FileInputStream是把文件当做数据源。ByteArrayInputStream则是把内存中的某个数组对象当做数据源。

【示例4简单测试ByteArrayInputStream 的使用

public class Demo05 {

 

    public static void main(String[] args) {

        byte[] b = "abcdefg".getBytes();

        test(b);

    }

   

    public static void test(byte[] b){

        ByteArrayInputStream bais = null;

        StringBuilder sb = new StringBuilder();

        int temp = 0;

        int num = 0;  //用于保存读取字节数

        try {

             bais = new ByteArrayInputStream(b); 

                      

             while((temp = bais.read())!=-1){

                 sb.append((char)temp);

                 num++;

             }

 

             System.out.println(sb);

             System.out.println("读取的字节数:"+num);

        }finally{

             try {

                 if(bais!=null){

                     bais.close();

                 }

             } catch (IOException e) {

                     e.printStackTrace();

             }

        }

    }

}

    本节我们先讲到这里,下节我们继续……





「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


  笔记包含从浅入深的六大部分:

  A-Java入门阶段

  B-数据库从入门到精通

  C-手刃移动前端和Web前端

  D-J2EE从了解到实战

  E-Java高级框架精解

  F-Linux和Hadoop