• FileCopy


    /*【入】指的是到内存里,【出】指的是到内存外*/
    import java.io.*;
    
    public class MyReadFile{
        public static void main(String[] args){
            try{
                /*第一步,定位数据源&&目标文件*/
                File f = new File("D:/lab_2/test.txt");
                File f2 = new File("D:/lab_2/test2.txt");
                
                /*第二步,建立输入&&输出管道*/
                FileInputStream fis = new FileInputStream(f);
                FileOutputStream fos = new FileOutputStream(f2);
                
                /*第三步,操作管道*/
                for(;fis.available() > 0;)
                    fos.write(fis.read());
                
            }catch(Exception e){}
        }
    }

     由于是一个字节一个字节的读写,在文件稍微大一点的时候(大于1MB)时,速度会非常的慢。

    稍作修改即可,每次1000个字节读写。

           byte[] tmp = new byte[1000];
                for(;fis.available() > 0;)
                    fis.read(tmp);
                    fos.write(tmp);

    据说2的n次方计算机处理效率会更快。

                byte[] tmp = new byte[8192];
                for(;fis.available() > 0;)
                    fis.read(tmp);
                    fos.write(tmp);                                    

     最后是标准版。

    /*第三步,操作管道*/
                byte[] tmp = new byte[8192];
                //处理大部分内容
                int length = fis.available()/8192;
                for(int i = 0; i < length; i ++){
                    fis.read(tmp);
                    fos.write(tmp);
                }
                //处理最后剩下的内容
                int size = fis.read(tmp);
                fos.write(tmp, 0, size);
    /*

    */
    import java.io.*;
    
    public class MyReadFile{
        public static void main(String[] args){
            try{
                /*定位数据源&&定位目标文件*/
                File f = new File("D:/lab_2/test.txt");
                File f_copy = new File("D:/lab_2/test2.txt");
                
                /*建立将数据从硬盘输入到内存的管道
                &&建立将数据从内存输出到硬盘的管道*/
                FileInputStream fis = new FileInputStream(f);
                FileOutputStream fos = new FileOutputStream(f_copy);
                
                /*操作管道---->传输数据*/
                byte[] tmp = new byte[8192]; 
                /*建立一个临时的array用于一次性大量读写,提高读写大文件的效率*/
                
                /*********复制大部分数据******假设总共有8192+1024byte*****/
                
                int length = fis.available()/8192;                 /*根据假设length = 1*/ 
                
                /*这里除完后会有余数(长度小于8192),也就是会剩下一段数据读不到,
                  如果int length = fis.available()/8192 + 1;多读一次的话,
                  结果复制的文件会比源文件大,因为实际剩余的长度不足8192。*/
                
                for(int i = 0; i < length; i ++){
                    fis.read(tmp);
                    fos.write(tmp);
                }                                                /*根据假设复制了8192byte*/
                
                /**********复制剩下的数据**********根据假设还有1024byte***********/
                int left_length = fis.available();                /*根据假设left_length = 1024*/ 
                
                fis.read(tmp, 0, left_length);
                fos.write(tmp, 0, left_length);                    /*根据假设复制了1024byte*/
                
            }catch(Exception e){}
        }
    }
  • 相关阅读:
    word查找与替换
    细说ASP.NET Windows身份认证
    防钓鱼代码
    sql触发器
    url地址栏参数
    sql递归查询
    认识TWICImage类
    尝试发个贴
    泛型单元
    [学习官方例子]TArray
  • 原文地址:https://www.cnblogs.com/xkxf/p/6043223.html
Copyright © 2020-2023  润新知