Java Path Files.copy如果存在则重命名

时间:2014-04-08 15:13:43

标签: java path exists file-copying

只是一个简单的问题,有一个很难(对我来说)找到答案:D。这是我的代码(即将尝试翻译西班牙语部分):

File carpetanueva = new File("C:"+File.separator+"sistema" + File.separator +
     fechasal+File.separator+doc);
carpetanueva.mkdirs();      
carpetanueva.setWritable(true);
rutadestino = ("c:"+File.separator+"sistema" + 
     File.separator + fechasal+File.separator + 
     doc+File.separator+"imagen.jpg");

//realizo la copia de la imagen desde el jfilechooser a su destino:
Path desde = Paths.get(rutaorigen);
Path hacia = Paths.get(rutadestino);

try {
    Files.copy(desde, hacia);
    JOptionPane.showMessageDialog(null, 
            "Se adjunto la planilla de ambulancia correctamente");          
} catch (IOException e) {
    JOptionPane.showMessageDialog(null, "error: "+e.getLocalizedMessage());
}

我从JFileChooser获得“rutaorigen”(frompath)。我通过使用一些变量创建“rutadestino”(topath),这样我就可以给出一个订单。问题是..。目录和文件“imagen.jpg”已经存在,它给出了一个错误..(例外)..我如何检查图像是否已经存在,如果存在,重命名新图像例如,imagen2?我不能弄清楚代码,因为我是一个新手,我做了一个研究,无法找到这样的东西!在此先感谢:)

4 个答案:

答案 0 :(得分:4)

好的,如果src是您要复制的文件的Pathdst Path到您要编写的文件,这是一个快速解决方案,和newName Path到要重命名为的文件:

if (Files.exists(dst))
    Files.move(dst, newName);
Files.copy(src, dst);

请注意,您可以使用Path中的方法来简化路径构建:.resolve().resolveSibling().relativize()


编辑:这是一个函数,它会在给定目录(dir),基本文件名baseName和“扩展名”(不带点)extension的情况下返回合适的名称:

private static Path findFileName(final Path dir, final String baseName,
    final String extension)
{
    Path ret = Paths.get(dir, String.format("%s.%s", baseName, extension));
    if (!Files.exists(ret))
        return ret;

    for (int i = 0; i < Integer.MAX_VALUE; i++) {
        ret = Paths.get(dir, String.format("%s%d.%s", baseName, i, extension));
        if (!Files.exists(ret))
            return ret;
    }
    throw new IllegalStateException("What the...");
}

答案 1 :(得分:3)

我认为此链接有助于How do I check if a file exists?

因此,对于您的情况,可能会执行以下操作:

File toFile = new File(rutadestino);
if (toFile.exists()) {
    // rename file
    toFile.renameTo(new File("newFilePath/newName.jpg"));
} else {
    // do something if file does NOT exist
}

希望有所帮助!有关详细信息,请查看Java文档以查找File

答案 2 :(得分:0)

sory晚了。但是我的代码可以帮助你解决问题。

public void copyFile(File source, File dest) throws IOException,
FileAlreadyExistsException {
    File[] children = source.listFiles();
    if (children != null) {
        for (File child : children) {
            if (child.isFile() && !child.isHidden()) {

                String lastEks = child.getName().toString();
                StringBuilder b = new StringBuilder(lastEks);
                File temp = new File(dest.toString() + "\\"
                        + child.getName().toString());

                if (child.getName().contains(".")) {
                    if (temp.exists()) {
                        temp = new File(dest.toString()
                                + "\\"
                                + b.replace(lastEks.lastIndexOf("."),
                                        lastEks.lastIndexOf("."), " (1)")
                                        .toString());
                    } else {
                        temp = new File(dest.toString() + "\\"
                                + child.getName().toString());
                    }
                    b = new StringBuilder(temp.toString());
                } else {
                    temp = new File(dest.toString() + "\\"
                            + child.getName());
                }
                if (temp.exists()) {
                    for (int x = 1; temp.exists(); x++) {
                        if (child.getName().contains(".")) {
                            temp = new File(b.replace(
                                    temp.toString().lastIndexOf(" "),
                                    temp.toString().lastIndexOf("."),
                                    " (" + x + ")").toString());
                        } else {
                            temp = new File(dest.toString() + "\\"
                                    + child.getName() + " (" + x + ")");
                        }
                    }
                    Files.copy(child.toPath(), temp.toPath());
                } else {
                    Files.copy(child.toPath(), temp.toPath());
                }
            } else if (child.isDirectory()) {
                copyFile(child, dest);
            }
        }
    }
}

功能:  1.重命名目标中是否存在文件。例如:document.doc如果存在document(1).doc如果存在document(2).doc如果存在...  2.将所有文件从源(仅文件)复制到目标

中的一个文件夹

答案 3 :(得分:0)

下面的代码检查文件是否已存在于目标中,如果存在,则将#1附加到扩展名之前的文件名中。如果该文件名也存在,它将继续追加#2,#3,#4 ...,直到目标中不存在该文件名。由于()和空格在Unix环境中会造成问题,因此我改用#。

如果目标文件中具有相同名称的文件也具有相同的内容并可以采取相应的措施,则可以扩展此范围并进行SUMCHECK。

贷方转到johan indra Permana

        String lastEks = file.getName().toString();
        StringBuilder b = new StringBuilder(lastEks);
        File temp = new File(backupDir.toString() + File.separator + file.getName().toString());

        if (file.getName().contains(".")) {
            if(temp.exists()) {
                temp = new File(backupDir.toString() + File.separator + 
                        b.replace(lastEks.lastIndexOf("."), lastEks.lastIndexOf("."),"#1").toString());
            } else {
                temp = new File(backupDir.toString() + File.separator + file.getName().toString());
            }
            b = new StringBuilder(temp.toString());
        } else {
            temp = new File(backupDir.toString() + File.separator + file.getName());
        }

        if (temp.exists()) {
            for (int x=1; temp.exists(); x++) {
                if(file.getName().contains(".")) {
                    temp = new File (b.replace(
                            temp.toString().lastIndexOf("#"),
                            temp.toString().lastIndexOf("."),
                            "#" + x ).toString());
                } else {
                    temp = new File(backupDir.toString() + File.separator
                            + file.getName() + "#" + x );
                }
            }
            Files.copy(file.toPath(), temp.toPath());
        } else {
            Files.copy(file.toPath(), temp.toPath());
        }