- 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 src1= 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();
- }
- }
- }
- }
来源: http://www.phpxs.com/code/1002749/