java 操作文件夹代码详解编程语言

import java.io.File;   
import java.io.FileInputStream;   
import java.io.FileOutputStream;   
import java.io.IOException;   
import java.nio.ByteBuffer;   
import java.nio.channels.FileChannel;   
 
public class FileManipulationTest {   
 
    public static void main(String[] args) {   
        // TODO Auto-generated method stub   
        File src = new File("C:/Users/leo/Desktop/yidu");   
        File dst = new File("C:/Users/leo/Desktop/dd/mm");   
        copy(src, dst,true,true);//剪切   
    }   
 
 
    public static boolean rename(File file,String name){   
        String str = file.getParent();   
        if(!str.endsWith(File.separator))   
            str += File.separator;   
        return file.renameTo(new File(str+name));   
    }   
 
 
    public static void delete(File file){   
        if(file.isFile()){   
            file.delete();   
        }else if(file.isDirectory()){   
            File[] list = file.listFiles();   
            for(int i=0;i<list.length;i++){  
                delete(list[i]);                   
            }   
            file.delete();   
        }   
    }   
 
    @Deprecated  
    public static void cut(File src,File dst){   
        copy(src, dst,true,false);   
        delete(src);   
 
    }   
 
//上面的cut方法将文件夹全部复制后再删除整个文件夹,这种方法不好。因为如果有几个文件复制失败,源文件也会都被删除了   
 
//若要剪切应该用下面的copy方法,将参数cut设为true,它是复制一个删除一个,复制失败就不会删除源文件   
 
    /**   
     *    
     * @param src:源文件(夹)   
     * @param dst:目标文件(夹)   
     * @param forced:如果遇到同名文件,是否覆盖   
     * @param cut:复制完是否删除源文件,若设为true,效果如同剪切   
         * 注意:dst是目标路径而不是目标路径所在的文件夹,比如要不c:/dir复制到d:/盘下,则dst应该是File("d:/dir")而不是File("d:/")   
     */   
 
    public static void copy(File src,File dst,boolean forced,boolean cut){   
        if(src.isFile()){   
            if(!dst.isFile() || forced)   
                try {   
                    dst.createNewFile();   
                    _copy(src, dst);   
                    if(cut)   
                        src.delete();   
                } catch (IOException e) {   
                    // TODO Auto-generated catch block   
                    e.printStackTrace();   
                }              
        }   
        else if(src.isDirectory()){   
            dst.mkdirs();   
            File[] list = src.listFiles();   
            for(int i=0;i<list.length;i++){   
                String rp = list[i].getAbsolutePath().substring(src.getAbsolutePath().length(), list[i].getAbsolutePath().length());   
                File dstFile = new File(dst.getAbsolutePath()+rp);   
                copy( list[i],dstFile,forced,cut);                 
            }   
            if(cut)   
                src.delete();   
        }   
    }   
 
    private static void _copy(File src,File dst) throws IOException{   
        FileChannel dstfc = null;   
        FileChannel srcfc = null;   
        try {   
            dstfc = new FileOutputStream(dst).getChannel();   
            srcfc = new FileInputStream(src).getChannel();   
            ByteBuffer buf = ByteBuffer.allocate(4*1024);   
            while(srcfc.size()>srcfc.position()){   
                buf.clear();   
                srcfc.read(buf);   
                buf.flip();   
                dstfc.write(buf);   
            }   
        } finally {   
            try {   
                if(dstfc != null)   
                    dstfc.close();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
            try {   
                if(srcfc != null)   
                    srcfc.close();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
        }   
    }   
}  

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11068.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论