1、IO流的分类

1.根据处理数据类型的不同分为:
字符流:1)Reader 读取字符流的抽象类
      常用方法: read() 读取单个字符
read(char[] cbuf) 将字符读入数组。
            read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。
            close() 关闭该流并释放与之关联的所有资源。
      2)Writer 写入字符流的抽象类
      常用方法:write(int c) 写入单个字符。
           write(String str) 写入字符串
           write(String str, int off, int len) 写入字符串的某一部分。
           write(char[] cbuf) 写入字符数组。
           write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
           flush() 刷新该流的缓冲。
           close() 关闭此流,但要先刷新它。
字节流:
      1)InputStream 此抽象类是表示字节输入流的所有类的超类
       常用方法:read() 从输入流中读取数据的下一个字节。
            read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
            read(byte[] b, int off, int len) 将输入流中最多 len 个数据字节读入 byte 数组。
            close() 关闭此输入流并释放与该流关联的所有系统资源。
      2) OutputStream 此抽象类是表示字节输出流的所有类的超类
       常用方法:write(int b) 将指定的字节写入此输出流。
            write(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此输出流。
            write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的
            flush() 刷新此输出流并强制写出所有缓冲的输出字节。
            close() 关闭此输出流并释放与此流有关的所有系统资源。
2.根据数据流向不同分为:输入流和输出流
3.字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。
4.字节流和字符流的区别:
(1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
(2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
(3)字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的;而字符流在操作的时候下后是会用到缓冲区的,是通过缓冲区来操作文件,我们将在下面验证这一点。
5.结论:优先选用字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。
6.输入流和输出流
对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

2、IO流的结构图

3、字节流复制文件

 package FileInputStream;

 import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; // 字节流复制文件
public class Copy字节流复制文件 {
public static void main(String[] args) {
// 复制文件的起始时间
long s = System.currentTimeMillis();
// 定义输入\输出流为mull
FileInputStream fis = null;
FileOutputStream fos = null;
// 手动抛出异常
try {
// 读取文件
fis = new FileInputStream("d:\\digui.mp4");
// 读取完毕复制的文件
fos = new FileOutputStream("d:\\dd.mp4");
// 定义一个字节数组 存到数组b中
byte[] b = new byte[ * ];
// 起始长度为0
int len = ;
// while(){} 循环 一边读取 ,一边写入(复制)文件
while ((len = fis.read(b)) != -) {
fos.write(b, , len);
fos.flush(); // 文件刷新
}
} catch (Exception e) {
System.out.println(e);
throw new RuntimeException("文件复制失败"); // 手动抛除异常
// 最终执行语句
} finally {
// 复制的文件不为空时 关闭释放资源
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
System.out.println(e);
throw new RuntimeException("文件复制失败");
}
}
}
}
}
// 复制文件的结束时间 单位:ms 毫秒
long e = System.currentTimeMillis();
System.out.println(e-s);
}
}

4、字符流复制文件

 package Demo;

 import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//字符流复制文件 FileReader read读取
// FileWriter write写入
public class Copy字符流复制文件 {
public static void main(String[] args) {
long s = System.currentTimeMillis();
FileReader fr = null; // 字符输入流
FileWriter fw = null; // 字符输出流
try {
fr = new FileReader("d:\\b.txt");
fw = new FileWriter("d:\\b22.txt");
char[] c = new char[]; // 字符类char
int len = ;
while((len=fr.read(c))!=-){
fw.write(c,,len);
fw.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
long e = System.currentTimeMillis();
System.out.println(e-s);
}
}

IO流的文件复制的更多相关文章

  1. java中的IO流之文件复制

    O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两 ...

  2. JAVA(IO流)文件复制

    package com.am; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOEx ...

  3. IO流----操作文件的9种方法代码实现

    IO流----操作文件的9种方法代码实现: 1:使用字节流读写数据: 四种方式: method1:          每次读写一个字节,边读边写: /* * 复制文本文件. * * 数据源:从哪里来 ...

  4. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  5. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

  6. java io流 创建文件、写入数据、设置输出位置

    java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...

  7. 38、使用IO流进行文件拷贝

    使用IO流进行文件拷贝 需求:在项目的根目录里面创建一个java.txt的文件,然后将这个文件拷贝到file文件夹里面并且重命名为good.txt文件先以流的方式将java.txt文件读取到内存中,然 ...

  8. Java基础教程:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  9. IO流(字节流复制)01

    package ioDemo; import java.io.*; /** * IO流(字节流复制) * Created by lcj on 2017/11/2. */ public class bu ...

随机推荐

  1. 冒泡法排序参考(Java)

    package com.swift; public class Maopao { //冒泡法 public static void main(String[] args) { int[] arr= { ...

  2. ios 序列化

    1到底这个序列化有啥作用? 面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中(来源于某教材的一 ...

  3. 导出Excel插件——Export-CSV ---20150610

    出处:http://bbs.hcharts.cn/thread-99-1-1.html   导出Excel插件——Export-CSV 一.插件信息 插件名:Export-CSV(导出Execl文件) ...

  4. CF815D Karen and Cards 官方题解翻译

    看到这道题,网上没有中文版的官方题解,于是就自己翻译了一遍. 不是机器翻译,是一个字一个字纯手翻译的,如果有错误欢迎指正. 比如我们有一张卡片,三个参数分别是 a1 = 4, b1 = 2, c1 = ...

  5. 使用Redis作为高速缓存

    Redis适合哪些业务场景常规业务系统的数据库访问中,读写操作的比例一般在7/3到9/1,也就是说读操作远多于写操作,因此高并发系统设计里,通过NoSQL技术将热点数据(短期内变动概率小的数据)放入内 ...

  6. [JOYOI] 1035 棋盘覆盖

    题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多 ...

  7. 破解点触码的识别之第三方平台超级鹰的SDK(python3版本)

    import requestsfrom hashlib import md5 class Chaojiying(object): def __init__(self, username, passwo ...

  8. MySQL 查询优化之 Index Merge

    MySQL 查询优化之 Index Merge Index Merge Intersection 访问算法 Index Merge Union 访问算法 Index Merge Sort-Union ...

  9. Linux用户身份(命令详解与补正)

    基于Red Hat Enterprise Linux 7.5 Linux中的root就是存在于所有类UNIX系统中的超级用户,持有最高管理权限,能添加/删除用户.开关机.关闭或开启硬件或者系统服务等, ...

  10. Linux系统状态检测

    基于Red Hat Enterprise Linux 7.5 1.ifconfig ifconfig用于获取和配置网络接口的网络参数,格式为“ifconfig [网络设备] [参数]” 参数: add ...