IO流的文件复制
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流的文件复制的更多相关文章
- java中的IO流之文件复制
O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两 ...
- JAVA(IO流)文件复制
package com.am; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOEx ...
- IO流----操作文件的9种方法代码实现
IO流----操作文件的9种方法代码实现: 1:使用字节流读写数据: 四种方式: method1: 每次读写一个字节,边读边写: /* * 复制文本文件. * * 数据源:从哪里来 ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java io流 对文件夹的操作
java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- 38、使用IO流进行文件拷贝
使用IO流进行文件拷贝 需求:在项目的根目录里面创建一个java.txt的文件,然后将这个文件拷贝到file文件夹里面并且重命名为good.txt文件先以流的方式将java.txt文件读取到内存中,然 ...
- Java基础教程:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- IO流(字节流复制)01
package ioDemo; import java.io.*; /** * IO流(字节流复制) * Created by lcj on 2017/11/2. */ public class bu ...
随机推荐
- KVM 重命名虚机
KVM 重命名虚机 1. 查看虚机列表 [root@bjape01-kvm1 ~]# virsh list --all Id 名称 状态 --- ...
- Cocos2d-X研究之3.0 场景切换特效汇总
Cocos2d-X研究之3.0 场景切换特效汇总 2014-08-05 0个评论 来源:游戏编程 收藏 我要投稿 cocos2d-x 3.0中场景切换特效比较多,而且游戏开 ...
- [图文] Fedora 28 使用 Virt-Manager 制作并优化QCOW2镜像——Windows 10 1709
实验说明: 云计算的发展使得桌面上云,windows 10就必不可少,这一章就如何制作QCOW2镜像文件并优化进行说明. 实验环境: 宿主机系统 :Fedora 28 WorkStation 虚拟 ...
- jquery如何获取手机网页触屏坐标:ontouchstart 、ontouchend、ontouchmove
function handleTouchEvent(event) { //只跟踪一次触摸 ) { var output = document.getElementById("output&q ...
- memory bist lib
model NVIC_REG6T_1024x32(resetb,margin,clk,en,we,addr,d,q) ( bist_definition( clock clk high; chip_e ...
- 编写个makefile文件测试patsubst 的作用
1 SRCS := $(wildcard *.c) 2 OBJS := $(patsubst %.c,%.o,$(SRCS) ) //把$(SRCS)中的文件.c全部换成.o文件 3 all: 4 @ ...
- 基础训练 Huffuman树
Huffuman树 /*解法一*/ #include<iostream> #include<queue> using namespace std; int main(){ pr ...
- PAT Basic 1040
1040 有几个PAT 字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串 ...
- chromedriver 下载
https://sites.google.com/a/chromium.org/chromedriver/downloads 百度网盘链接:https://pan.baidu.com/s/1nwL ...
- c#笔记2019-01-06
using System; using System.Collections.Generic; using System.Linq; using System.Text; /*2019-01-06C# ...