zoukankan      html  css  js  c++  java
  • 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();
    }

     

  • 相关阅读:
    async/await的一些用法
    软件须把握两个点: 错误可控, 复杂度可控
    C++内存管理原则
    *复赛前提醒
    一些好用的网站
    NOIP真题汇总
    信息学中的一些些数论
    [Luogu 1052] noip 05 过河
    浅谈概率期望动态规划
    [Luogu 1312] noip11 Mayan游戏
  • 原文地址:https://www.cnblogs.com/xuningchuanblogs/p/7375634.html
Copyright © 2011-2022 走看看