• java使用字节流和字符流实现文件复制


    大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现。

    那究竟该怎么做那,话不多说,直接上代码:

    一,使用字节流复制文件

    public class FileByteCopy {
    public static void main(String[] args) {

    FileByteCopy f= new FileByteCopy();
    try {
    f.copy("d:/File/1.txt","d:/CopyFile/1.txt");

    } catch (Exception e) {
    e.printStackTrace();
    }

    }
    public void copy(String f1,String f2) throws Exception{
    FileInputStream fis = new FileInputStream(f1); //首先构建输入流的对象,指定需要读取的文件路径 
    FileOutputStream fos = new FileOutputStream(f2,false); //构建文件输出流的对象,即将文件复制在哪里去,后面的true代表每次写入时不清空当前文件内容 

    //方法一,单字节复制
    // int value = fis.read(); / //一个字节一个字节的读取文件的内容 
    // while(value!=-1){
    // fos.write(value);
    // fos.flush();
    // value = fis.read();
    // }

    //方法二  以字节数组为单位传递 (一次传递一个大小自定义的数组)
    byte [] bytes = new byte[1024];
    int len=fis.read(bytes); //把读取的字节存入到字节数组中  此时的len为文件中的大小,注意不一定是1024。下图中的95字节即为对应的源文件的len值

    while(len!=-1){
    // fos.write(bytes); //使用这种方法,如果源文件大小不是1024,,复制后的文件也会是1024。因为一次读取的最小的都是1024,详细见下图。

    复制前

    复制后


    fos.write(bytes, 0, len); //从偏移量0开始到len(95)写入字符,可以保证源文件和复制后的文件大小一致。
    fos.flush();
    len=fis.read(bytes);
    }
    //读取完毕后关闭流
    fis.close();
    fos.close();
    }
    }

    二,使用字符流复制文件(与字节流同理)

    public class FileCharCopy {
    public static void main(String[] args) {
    FileCharCopy f = new FileCharCopy();
    try {
    f.copy("d:/File/1.txt","d:/CopyFile/1.txt"); 

    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    public void copy(String f1,String f2) throws Exception{
    FileReader fr = new FileReader(f1);
    FileWriter fw =new FileWriter(f2,false);
    //int value=fr.read();
    //while(value!=-1){
    //fw.write(value);
    //fw.flush();
    //value=fr.read();
    //}
     char [] chars = new char[1024];
     int len =fr.read(chars);
     while(len!=-1){
     fw.write(chars, 0, len);
     fw.flush();
     len =fr.read(chars);
     }

     fr.close();
     fw.close();
    }

     

  • 相关阅读:
    路由交换03-----传输层协议
    Linux结构目录
    Linux RedHat 7 配置本地 YUM源
    HUAWEI,H3C 三层交换机 常用命令
    windows操作系统更改 <远程桌面> 端口号
    SpringBoot 2.x (2):请求和传参
    SpringBoot 2.x (1):手动创建项目与自动创建项目
    Eclipse中使用Maven搭建SSM框架
    基于Spring和Mybatis拦截器实现数据库操作读写分离
    WinServer配置MySQL主从同步
  • 原文地址:https://www.cnblogs.com/xuningchuanblogs/p/7375634.html
Copyright © 2020-2023  润新知