一定要注意:
传入的参数,应该是包含文件名的完整路径名,不能把一个文件复制到【文件夹】中,因为【文件夹】本身是不能有输入输出流的,只能复制到一个【文件】中,否则会报异常。

以字节流读写的三种方式

public class Test {
    private static final String FILE_PATH = "e:\\";
    private static final String FILE_TYPE = ".exe";
    private static final String FILE_FROM = FILE_PATH + 0 + FILE_TYPE;
    private static final String COPY_FILE_1 = FILE_PATH + 1 + FILE_TYPE;
    private static final String COPY_FILE_2 = FILE_PATH + 2 + FILE_TYPE;
    private static final String COPY_FILE_3 = FILE_PATH + 3 + FILE_TYPE;
    public static void main(String[] args) throws IOException {
        copyByBufStream(FILE_FROM, COPY_FILE_1);
        copyByBufArray(FILE_FROM, COPY_FILE_2);
        copyByByte(FILE_FROM, COPY_FILE_3);
    }
    /**
     * 利用缓冲输入流读取到一个缓冲容器后再写入。建议使用
     */
    public static boolean copyByBufStream(String filePathFrom, String filePathTo) {
        try {
            BufferedInputStream bufis = new BufferedInputStream(new FileInputStream(filePathFrom));
            BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream(filePathTo));
            int ch = 0;
            while ((ch = bufis.read()) != -1) {
                bufos.write(ch);
            }
            bufos.close();
            bufis.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 每次读取一个指定长度数组的字节。建议使用
     */
    public static boolean copyByBufArray(String filePathFrom, String filePathTo) {
        try {
            FileInputStream fis = new FileInputStream(filePathFrom);
            FileOutputStream fos = new FileOutputStream(filePathTo);
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = fis.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }
            fos.close();
            fis.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 一次读取一个字节。千万不要用,速度超级慢!
     */
    public static boolean copyByByte(String filePathFrom, String filePathTo) {
        try {
            FileInputStream fis = new FileInputStream(filePathFrom);
            FileOutputStream fos = new FileOutputStream(filePathTo);
            int ch = 0;
            while ((ch = fis.read()) != -1) {
                fos.write(ch);
            }
            fos.close();
            fis.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
}

以字符流读写的三种方式

public class Test {
    private static final String FILE_PATH = "e:\\";
    private static final String FILE_TYPE = ".txt";
    private static final String FILE_FROM = FILE_PATH + 0 + FILE_TYPE;
    private static final String COPY_FILE_1 = FILE_PATH + 1 + FILE_TYPE;
    private static final String COPY_FILE_2 = FILE_PATH + 2 + FILE_TYPE;
    private static final String COPY_FILE_3 = FILE_PATH + 3 + FILE_TYPE;
    public static void main(String[] args) throws IOException {
        //注意,只能复制纯文本格式的文件,否则就会出现乱码
        copyByBufLine(FILE_FROM, COPY_FILE_1);
        copyByBufArray(FILE_FROM, COPY_FILE_2);
        copyByChar(FILE_FROM, COPY_FILE_3);
    }
    /**
     * 一次写入一行字符
     */
    public static boolean copyByBufLine(String filePathFrom, String filePathTo) {
        try {
            BufferedReader bufr = new BufferedReader(new FileReader(filePathFrom));
            BufferedWriter bufw = new BufferedWriter(new FileWriter(filePathTo));
            String line = null;
            //另外开辟一个缓冲区,存储读取的一行数据,返回包含该行内容的字符串,不包含换行符,如果已到达流末尾,则返回【 null】
            while ((line = bufr.readLine()) != null) {
                bufw.write(line);
                bufw.newLine();// 写入一个行分隔符
                bufw.flush();
            }
            bufr.close();
            bufw.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 一次写入指定个数的字符
     */
    public static boolean copyByBufArray(String filePathFrom, String filePathTo) {
        try {
            BufferedReader bufr = new BufferedReader(new FileReader(filePathFrom));
            BufferedWriter bufw = new BufferedWriter(new FileWriter(filePathTo));
            char[] buf = new char[1024];
            int len = 0;
            while ((len = bufr.read(buf)) != -1) {
                bufw.write(buf, 0, len);
                bufw.flush();
                len = 0;
            }
            bufr.close();
            bufw.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 一次写入一个字符
     */
    public static boolean copyByChar(String filePathFrom, String filePathTo) {
        try {
            BufferedReader bufr = new BufferedReader(new FileReader(filePathFrom));
            BufferedWriter bufw = new BufferedWriter(new FileWriter(filePathTo));
            int ch = 0;
            while ((ch = bufr.read()) != -1) {
                bufw.write(ch);//写入单个字符
            }
            bufr.close();
            bufw.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
}

IO-文件 File 复制 读写 总结的更多相关文章

  1. Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  2. Go标准库之读写文件(File)

    Go标准库之读写文件(File) 创建一个空文件 package main import ( "log" "os" ) func main() { file, ...

  3. Java IO流之【缓冲流和文件流复制文件对比】

    与文件流相比,缓冲流复制文件更快 代码: package Homework; import java.io.BufferedOutputStream; import java.io.File; imp ...

  4. java学习笔记(九):Java 流(Stream)、文件(File)和IO

    Java 的控制台输入由 System.in 完成. 为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流.需要import ...

  5. Java - 17 Java 流(Stream)、文件(File)和IO

    Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型. ...

  6. [PY3]——IO——文件读写

    文件打开和关闭 # 使用open 打开文件,返回时值是一个 File-like对象 f.open('/test/file') # 使用read读取文件 f.read( ) # 使用close关闭文件 ...

  7. 流Stream 文件File 流IO

    Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...

  8. c# 命令行下编译c#文件 // c# file类读写文件

    c# 命令行下编译c#文件 2010-03-01 15:02:14|  分类: c# 学习|字号 订阅     在 开始  ——>程序 ——>vstool中打开vs2008命令提示. 通过 ...

  9. 20180803-Java 流(Stream)、文件(File)和IO

    Java 流(Stream).文件(File)和IO 下面的程序示范了用read()方法从控制台不断读取字符直到用户输入"q". // 使用BufferedReader 在控制台读 ...

随机推荐

  1. 装饰者模式(Decorator)

    首先来看一个例子: 比如,饮料可以分为很多种类,而这里我取一个咖啡,那么这个咖啡呢,有多种形式的, 比如有加糖了的咖啡,有加奶的咖啡,也有加热了的咖啡,也有加了冰块的咖啡. 而各个顾客的选择却是不同的 ...

  2. TCP/IP-UDP

    We read the world wrong but say that it deceives us. "我们看错了世界,却说世界欺骗了我们" 参考资料:TCP/IP入门经典 ( ...

  3. underscorejs-invoke学习

    2.13 invoke 2.13.1 语法: _.invoke(list, method, *args) 2.13.2 说明: 每个list属性值都执行method方法,根据method方法返回一个数 ...

  4. 如何用angularjs制作一个完整的表格之一__创建简单表格

    初步接手人生的第一个项目,需要用angularjs制作表格和实现各种功能,因此遇到了各种问题和以前不熟悉的知识点,在此记录下来,以供大家学习交流,解决方式可能并不完善或符合规范,如果大家有更好的方式欢 ...

  5. sizeof(int *) 和 sizeof(int)型的大小问题

    小问题,暂时记录注意一下   printf("sizeof(int): %d\n", (int)sizeof(int));     printf("sizeof(int ...

  6. 使用Ajax.ActionLink时,点击对应的按钮会重新加载一个页面,而不是在当前页面的指定模块加载

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 资料Link集合

    Spark RDD API详解(一) Map和Reduce|  scala中Iterator的比较| 使用sbt构建scala应用| sbt常用命令| sbt更改默认ivy仓库位置| linux手动安 ...

  8. 实验五:分析system_call中断处理过程

    原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 ...

  9. 转:如何查看linux版本 如何查看LINUX是多少位

    原文来自于:http://blog.csdn.net/hongweigg/article/details/7192471 一.如何得知自己正在使用的linux是什么版本呢,下面的几种方法将给你带来答案 ...

  10. mysql INNODB_TRX 事务表

    demo:/root# mysql -uroot -pkjk7787czcb --socket=/data01/mysql/mysql.sock -e"show processlist&qu ...