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. Linux关于FTP安全

    https://www.cnblogs.com/Hyber/archive/2017/02/04/6362916.htmlhttps://www.cnblogs.com/ichunqiu/p/7300 ...

  2. cocos2d popSceneWithTransition()方法

    要在CCDirector.h中增加如下方法: template <typename T> void popSceneWithTransition(float t) { CCASSERT(_ ...

  3. sublime点击预览未起作用?教你如何设置支持浏览器预览

    我用的text3版,其他版本未试,但应该也有效. 安了个view in browser插件,然而点击预览未起作用. 搜解决方法,发现了另一个插件,sidebar enhancements,设置快捷键预 ...

  4. 【分块】[HNOI2010]弹飞绵羊&分块大法祭

    分块(似乎还有一种动态树(LCT)做法) 第一次学习分块,似乎有点小激动 这是黄学长的分块入门博客「分块」数列分块入门1 – 9 by hzwer 题目描述 某天,Lostmonkey发明了一种超级弹 ...

  5. java.sql.date 插入数据库没有时分秒

    java.sql.date 插入数据库没有时分秒 把java中实体类的sql.date类型改成java.sql.Timestamp类型即可 util.date 转 Timestamp: java.sq ...

  6. 对linux中source,fork,exec的理解以及case的 使用

    fork   使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child proc ...

  7. redis 内存管理与数据淘汰机制(转载)

    原文地址:http://www.jianshu.com/p/2f14bc570563?from=jiantop.com 最大内存设置 默认情况下,在32位OS中,Redis最大使用3GB的内存,在64 ...

  8. jsp jstl标签库 el表达式

    一.JSTL标签是什么? 提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言. 同时还提供了格式化数据和日期的方法.实现这些功能需要I18N格式标签库(I18N-c ...

  9. MySQL容量规划之tcpcopy应用之道

    官方文档:https://github.com/session-replay-tools/mysql-replay-module tcpcopy可以将正式环境上来自客户端的请求复制一份到测试端并复现, ...

  10. USACO Hamming Codes

    题目大意:求n个两两hamming距离大于等于d的序列,每个元素是一个b bit的数 思路:仍然暴力大法好 /*{ ID:a4298442 PROB:hamming LANG:C++ } */ #in ...