美文网首页
10.3-全栈Java笔记:常用流详解(一)

10.3-全栈Java笔记:常用流详解(一)

作者: 全栈JAVA笔记 | 来源:发表于2017-07-05 09:10 被阅读33次

     文件字节流

    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();

                 }

            }

        }

    }

    字节数组流

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

    说白了,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 

    相关文章

      网友评论

          本文标题:10.3-全栈Java笔记:常用流详解(一)

          本文链接:https://www.haomeiwen.com/subject/trvfhxtx.html