我想写一个复制的方法,如果newPath 中有相同的文件及文件夹时,则以 复件*** 形式出现,但是我试验了很多方法,但是最后最好的情况是,虽然能够以 复件*** 这样的形式出现,但是文件夹中的所有文件也同样被替换成 复件*** ,而我希望只有最外层的文件夹名改成 复件*** 这样的形式,想的头都大了,还是想不出,无奈请问大家怎么写呢?

解决方案 »

  1.   


    package com.train.test;import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;public class Test
    {
    private static void file2file(File from, File to) throws IOException
    {
    InputStream in = null;
    OutputStream out = null;

    try
    {
    in = new FileInputStream(from);
    out = new FileOutputStream(to);

    byte[] buf = new byte[1024*4];
    int n = 0;

    while (-1 != (n = in.read(buf, 0, buf.length)))
    {
    out.write(buf, 0, n);
    }
    }
    finally
    {
    if (null != in)
    {
    in.close();
    }

    if (null != out)
    {
    out.close();
    }
    }
    }

    private static void file2dir(File file, File dir) throws IOException
    {
    if (!dir.exists())
    {
    dir.mkdirs();
    }

    File to = null;

    if (exists(file, dir))
    {
    to = new File(dir, "复件" + file.getName());
    }
    else 
    {
    to = new File(dir, file.getName());
    }


    file2file(file, to);
    }

    private static void dir2dir(File from, File to) throws IOException
    {
    if (!to.exists())
    {
    to.mkdirs();
    }

    File[] files = from.listFiles();

    if (null != files && 0 < files.length)
    {
    for (File file : files)
    {
    if (file.isFile())
    {
    file2dir(file, to);
    }
    else 
    {
    File todir = null;

    if (exists(file, to))
    {
    todir = new File(to, "复件" + file.getName());
    }
    else
    {
    todir = new File(to, file.getName());
    }

    dir2dir(file, todir);
    }
    }
    }
    }

    private static boolean exists(File from, File to)
    {
    File[] files = to.listFiles();

    if (null != files && 0 < files.length)
    {
    for (File file : files)
    {
    if (file.getName().equals(from.getName()))
    {
    return true;
    }
    }
    }

    return false;
    }

    public static void main(String[] args) throws IOException
    {
    dir2dir(new File("D:\\Test"), new File("C:\\Test"));
    }
    }