1 IO(Input Output)流概述

  • IO流用来处理设备之间的数据传输。
  • java对数据的操作是通过流的方式。
  • java用于操作流的对象都在IO包中。
  • 流按操作数据分为两种:字节流和字符流。
  • 流按流向分为:输入流和输出流。

2 IO流常用基流

  • 字节流的抽象基类

    • InputStream、OutputStream  
  • 字符流的抽象基类
    • Reader、Writer  
  • 注意:由这四个类派生出来的子类名称都是以其父类作为子类名的后缀,如InputStream的子类FileInputStream,Reader的子类FileReader。

3 FileWriter

3.1 FileWriter简介

  • FileWriter是用来写入字符的便捷类。

3.2 FileWriter的构造方法

  • 根据给定的File对象构造一个FileWriter对象
public FileWriter(File file)
           throws IOException
  • 根据给定的File对象构造一个FileWriter对象,如果boolean的值为true,则将字符写入文件末尾处。
public FileWriter(File file,
                  boolean append)
           throws IOException
  • 根据给定的文件名构造一个FileWriter对象
public FileWriter(String fileName)
           throws IOException
  • 根据给定的文件名构造一个FileWriter对象,如果boolean的值是true,则将字符写入到文件末尾
public FileWriter(String fileName,
                  boolean append)
           throws IOException
  • 示例:
package java19;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        /**
         * 创建一个向文件中写入字符数据的字符输出流对象
         * 如果文件不存在,则自动创建
         * 如果文件存在,则会被覆盖
         */
        FileWriter writer = new FileWriter("demo.txt");
        /**
         * 调用Writer中的方法
         */
        writer.write("你好,世界");
        //刷新
        writer.flush();

        //字符输出流关闭
        writer.close();

    }
}
  • 注意:在关闭流之后,再调用flush()或wirter()会导致抛出IOException。
  • 示例:换行
package java19;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class FileWriterDemo {
    private static final String LINE_SEPARTOR = System.getProperty("line.separator");

    public static void main(String[] args) throws IOException {
        /**
         * 创建一个向文件中写入字符数据的字符输出流对象
         * 如果文件不存在,则自动创建
         * 如果文件存在,则会被覆盖
         */
        FileWriter writer = new FileWriter("demo.txt");
        /**
         * 调用Writer中的方法
         */
        writer.write("你好,"+LINE_SEPARTOR+"世界");
        //刷新
        writer.flush();

        //字符输出流关闭
        writer.close();

    }
}
  • 示例:追加文字,构造方法的第二个参数为true
package java19;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class FileWriterDemo {
    private static final String LINE_SEPARTOR = System.getProperty("line.separator");

    public static void main(String[] args) throws IOException {
        /**
         * 创建一个向文件中写入字符数据的字符输出流对象
         * 如果文件不存在,则自动创建
         * 如果文件存在,则会被覆盖
         */
        FileWriter writer = new FileWriter("demo.txt",true);
        /**
         * 调用Writer中的方法
         */
       // writer.write("你好,"+LINE_SEPARTOR+"世界");
        writer.write("haha");
        //刷新
        writer.flush();

        //字符输出流关闭
        writer.close();

    }
}
  • 示例:异常处理
package java19;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class FileWriterDemo {
    private static final String LINE_SEPARTOR = System.getProperty("line.separator");

    public static void main(String[] args)  {
        /**
         * 创建一个向文件中写入字符数据的字符输出流对象
         * 如果文件不存在,则自动创建
         * 如果文件存在,则会被覆盖
         */
        FileWriter writer = null;

        try {
            writer= new FileWriter("demo.txt",true);
            /**
             * 调用Writer中的方法
             */
            // writer.write("你好,"+LINE_SEPARTOR+"世界");
            writer.write("haha");
            //刷新
            writer.flush();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if(writer != null){
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException("关闭流失败"+e.getMessage());
            }
        }

    }
}

4 FileReader

4.1 FileReader简介

  • 用来读取字符文件的便捷类。

4.2 FileReader构造方法

  • 在给定的文件名中创建一个FileReader对象
public FileReader(String fileName)
           throws FileNotFoundException
  • 在给定的文件中创建一个FileReader对象
public FileReader(File file)
           throws FileNotFoundException
  • 读取单个字符,返回值是作为整数读取的字符,在0~65535之间,如果到达末尾,则返回-1
public int read()
         throws IOException
  • 示例:
package java19;

import java.io.FileReader;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class FileReaderDemo {
    public static void main(String[] args) {
        FileReader fr = null;
        try {
            fr = new FileReader("demo.txt");

            int ch = 0;
            while((ch = fr.read()) != -1){
                System.out.print((char)ch);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(fr != null){
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException("流关闭失败"+e.getMessage());
                }

            }
        }

    }
}

  • 将字符读取数组。返回读取字符的个数,如果已到达末尾,则返回-1
public int read(char[] cbuf)
         throws IOException
  • 示例:
package java19;

import java.io.FileReader;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class FileReaderDemo {
    public static void main(String[] args) {
        FileReader fr = null;
        try {
            fr = new FileReader("demo.txt");
            char[] chs = new char[1024];

            int length = 0;
            while((length = fr.read(chs)) != -1){
                System.out.print(new String(chs,0,length));
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(fr != null){
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException("流关闭失败"+e.getMessage());
                }

            }
        }

    }
}

5 练习:文件复制

5.1 文件复制方式一

  • 示例:
package java19;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class FileCopy {
    public static void main(String[] args) throws IOException {
        //创建输入流和输出流
        FileReader fr = new FileReader("demo.txt");
        FileWriter fw = new FileWriter("test1.txt");

        //文件复制
        int ch = 0;
        while((ch = fr.read()) != -1){
            fw.write(ch);
        }

        //关闭流
        fr.close();
        fw.close();

    }
}

5.2 文件复制方式二

  • 示例:
package java19;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class FileCopy {
    public static void main(String[] args) throws IOException {
        //创建输入流和输出流
        FileReader fr = new FileReader("demo.txt");
        FileWriter fw = new FileWriter("test2.txt");

        //文件复制
        char[] buffer = new char[1024];
        int len = 0 ;
        while((len = fr.read(buffer) )!= -1){
            fw.write(buffer,0,len);
        }

        //关闭流
        fr.close();
        fw.close();

    }
}

IO (一)的更多相关文章

  1. VS2015编译GEOS

    下载链接:http://trac.osgeo.org/geos/ 1. 打开cmake,加载geos源码和定位geos的工程存放位置: 2.点击configure,会报错,首先设置CMAKE_INST ...

  2. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  3. 深究标准IO的缓存

    前言 在最近看了APUE的标准IO部分之后感觉对标准IO的缓存太模糊,没有搞明白,APUE中关于缓存的部分一笔带过,没有深究缓存的实现原理,这样一本被吹上天的书为什么不讲透彻呢?今天早上爬起来赶紧找了 ...

  4. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  5. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

  6. [.NET] 利用 async & await 进行异步 IO 操作

    利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html  序 上次,博主 ...

  7. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  8. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  9. Performance Monitor4:监控SQL Server的IO性能

    SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Applicati ...

  10. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

随机推荐

  1. [转]解析多级json数据为list中嵌套一级字典的形式

    #!/usr/bin/env python # encoding: utf-8 import json def read(obj,key): collect = list() for k in obj ...

  2. Django----->inclusion_tag的使用

    一种比较普遍的tag类型是只是渲染其它模块显示下内容,这样的类型叫做Inclusion Tag. 常用的模板标签是通过渲染 其他 模板显示数据的. 比如说,Django的后台管理界面,它使用了自定义的 ...

  3. Dora.Interception,为.NET Core度身打造的AOP框架:全新的版本

    Dora.Interception 1.0(Github地址:可以访问GitHub地址:https://github.com/jiangjinnan/Dora)推出有一段时间了,最近花了点时间将它升级 ...

  4. CTF---Web入门第一题 what a fuck!这是什么鬼东西?

    what a fuck!这是什么鬼东西?分值:10 来源: DUTCTF 难度:易 参与人数:7942人 Get Flag:3358人 答题人数:3475人 解题通过率:97% what a fuck ...

  5. HDU5447 Good Numbers

    http://acm.hdu.edu.cn/showproblem.php?pid=5447 网上好像只找到java的题解,写完就发一下c++代码咯,顺便纪念一下+存个int128板子 做法可以看tj ...

  6. [bzoj3955] [WF2013]Surely You Congest

    首先最短路长度不同的人肯定不会冲突. 对于最短路长度相同的人,跑个最大流就行了..当然只有一个人就不用跑了 看起来会T得很惨..但dinic在单位网络里是O(m*n^0.5)的... #include ...

  7. 大区间素数筛选(POJ 2689)

    /* *POJ 2689 Prime Distance *给出一个区间[L,U],找出区间内容.相邻的距离最近的两个素数和距离最远的两个素数 *1<=L<U<=2147483647 ...

  8. RPM挂载光盘(使用iso里面的来搭建yum环境)就是离线模式,

    找到光盘的完整路径名.在命令行输入:ls -l /dev | grep cdrom.   可以看到光盘的名字叫做:cdrom1.然后在命令行执行: mount /dev/cdrom1    /mnt/ ...

  9. GMP大法教你重新做人(从入门到实战)

    一.引言 GMP(The GNU Multiple Precision Arithmetic Library)又叫GNU多精度算术库,是一个提供了很多操作高精度的大整数,浮点数的运算的算术库,几乎没有 ...

  10. springcloud干活之服务消费者(feign)

    springcloud系列文章的第三篇 本章将继续讲述springcloud的消费者(feign) Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端. ...