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、字节流复制文件

 1 package FileInputStream;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6
 7 // 字节流复制文件
 8 public class Copy字节流复制文件 {
 9     public static void main(String[] args) {
10         // 复制文件的起始时间
11         long s = System.currentTimeMillis();
12         // 定义输入\输出流为mull
13         FileInputStream fis = null;
14         FileOutputStream fos = null;
15         // 手动抛出异常
16         try {
17             // 读取文件
18             fis = new FileInputStream("d:\\digui.mp4");
19             // 读取完毕复制的文件
20             fos = new FileOutputStream("d:\\dd.mp4");
21             // 定义一个字节数组  存到数组b中
22             byte[] b = new byte[1024 * 10];
23             // 起始长度为0
24             int len = 0;
25             // while(){} 循环   一边读取 ,一边写入(复制)文件
26             while ((len = fis.read(b)) != -1) {
27                 fos.write(b, 0, len);
28                 fos.flush();  //  文件刷新
29             }
30         } catch (Exception e) {
31             System.out.println(e);
32             throw new RuntimeException("文件复制失败");  // 手动抛除异常
33             // 最终执行语句
34         } finally {
35             // 复制的文件不为空时  关闭释放资源
36             if (fos != null) {
37                 try {
38                     fos.close();
39                 } catch (IOException e) {
40                     e.printStackTrace();
41                 } finally {
42                     if (fis != null) {
43                         try {
44                             fis.close();
45                         } catch (IOException e) {
46                             System.out.println(e);
47                             throw new RuntimeException("文件复制失败");
48                         }
49                     }
50                 }
51             }
52         }
53         // 复制文件的结束时间   单位:ms 毫秒
54         long e = System.currentTimeMillis();
55         System.out.println(e-s);
56     }
57 }

4、字符流复制文件

 1 package Demo;
 2
 3 import java.io.FileReader;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6 //字符流复制文件     FileReader   read读取
 7 //                   FileWriter   write写入
 8 public class Copy字符流复制文件 {
 9     public static void main(String[] args) {
10         long s = System.currentTimeMillis();
11         FileReader fr = null;   // 字符输入流
12         FileWriter fw = null;   // 字符输出流
13         try {
14             fr = new FileReader("d:\\b.txt");
15             fw = new FileWriter("d:\\b22.txt");
16             char[] c = new char[1024];  //  字符类char
17             int len = 0;
18             while((len=fr.read(c))!=-1){
19                 fw.write(c,0,len);
20                 fw.flush();
21             }
22         } catch (Exception e) {
23             e.printStackTrace();
24         }finally{
25             if(fw!=null){
26                 try {
27                     fw.close();
28                 } catch (IOException e) {
29                     e.printStackTrace();
30                 }finally{
31                     if(fr!=null){
32                         try {
33                             fr.close();
34                         } catch (IOException e) {
35                             e.printStackTrace();
36                         }
37                     }
38                 }
39             }
40         }
41         long e = System.currentTimeMillis();
42         System.out.println(e-s);
43     }
44 }

原文地址:https://www.cnblogs.com/zhangmenghui/p/10597754.html

时间: 2024-08-26 06:20:51

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

java中的IO流之文件复制

O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两种流:字符流和字节流.字符流的父类Reader(读取到内存)和Writer(从内存输出),字节流的父类InputStream(读取到内存)和OutputStream(从内存输出),然后为了方便各种操作,比如为了文件操作,派生了文件流:为了对象操作,派生了对象流:等等.当初我也是傻傻分不清到底是Inp

Java IO流 之 文件复制

http://www.verejava.com/?id=16994676228912 package com.io; import java.io.*; public class TestCopy { public static void main(String[] args) { InputStream is=null; OutputStream os=null; try { //读取文件 english.txt is=new FileInputStream(new File("res/1.p

JAVA(IO流)文件复制

1 package com.am; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 public class TuPian { 8 9 public static void main(String[] args) { 10 FileInputStream f1 = null; 11 FileOutputStream f2 = null;

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

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

java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ /** * 存储为二进制,给计算机看的 */ //创建文件 DataOutputStream sjl = new DataOutputStrea

.net 流——使用流进行文件复制

与Java中的各种文件流,网络流类似,.net中也有各类流.流的主要用途就是与应用程序外部的文件或数据源进行数据交互.基类为Stream,定义在命名空间System.IO下; 一,使用流进行一次性的复制写入 首先我们在桌面上建个测试用的文件,写入些东西: 之后是我们的代码: #region 使用流进行一次性复制 //创建一个文件流对象(参数一:指定了文件的位置:参数二:枚举值,指定操作系统打开文件的方式:参数三:表明了打开文件的意图:注意第二个参数与第三个参数要注意搭配使用) Stream so

关于java io流操作文件探讨

1.任务描述    2.读取一个字符 3.读取整个文件 4.复制文件 5.复制大文件 6.利用字符流解决乱码问题 一.任务描述 大家都知道程序是程序的运行是离不开内存的,但是很多东西并不在程序当中,而程序也需要操作它们.所以就需要一个东西与内存外的资源打交道,我们就把这个东西称为io流.io流分为输出流和输入流,输出流是将内存中的东西输出到内存之外,输入流是将内存之外的东西读取到内存中.一旦有了io流之后,与内存之外的资源打交道就十分方便了.为什么这么说,其实总体上就只需要三步操作,第一步,定位

Java中常用IO流之文件流的基本使用姿势

所谓的 IO 即 Input(输入)/Output(输出) ,当软件与外部资源(例如:网络,数据库,磁盘文件)交互的时候,就会用到 IO 操作.而在IO操作中,最常用的一种方式就是流,也被称为IO流.IO操作比较复杂,涉及到的系统调用比较多,相对操作内存而言性能很低.然而值得兴奋的是,Java提供了很多实现类以满足不同的使用场景,这样的实现类有很多,我只挑选些在日常编码中经常用到的类进行说明,本节主要介绍和文件操作相关的流,下面一起来瞧瞧吧. File File是Java在整个文件IO体系中比较

java io流与文件操作

Java的文件操作 File类位于java.io包中 我们可以使用File操作文件 首先创建对象 File file=new File("路径")//关联文件 创建文件:file.createNewFile()//首先这里会抛异常需要try...catch处理,其次如果有同名文件则不会创建. 创建文件夹:file.mkdir文件操作 File类位于java.io包中 我们可以使用File操作文件 首先创建对象 File file=new File("路径")//关联