Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Path Files.copy重命名(如果存在)_Java_Path_Exists_File Copying - Fatal编程技术网

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

Java Path Files.copy重命名(如果存在),java,path,exists,file-copying,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+

只是一个简单的问题,我很难找到答案: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。我用一些变量创建了rutadestino topath,这样我就可以给出一个顺序。问题是。如果目录和文件imagen.jpg已经存在,则会给出一个错误。。例外如何检查图像是否已存在,如果已存在,请将新图像重命名为,例如,imagen2?我搞不懂代码,因为我是个新手,我做了一项研究,却找不到这样的东西!提前感谢:

我想这个链接会有所帮助

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

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 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文档中的

OK,如果src是要复制的文件的路径,dst是要写入的文件的路径,newName是要重命名的文件的路径,这里有一个快速解决方案:

if (Files.exists(dst))
    Files.move(dst, newName);
Files.copy(src, dst);
请注意,您可以使用Path中的方法来帮助构建路径:.resolve、.resolveSibling、.relativize

编辑:这是一个函数,在给定目录dir、基本文件名baseName和不带点扩展名的扩展名的情况下,该函数将返回一个合适的名称:


好的,如果src是要复制的文件的路径,dst是要写入的文件的路径,newName是要重命名的文件的路径,那么这里有一个快速解决方案:

if (Files.exists(dst))
    Files.move(dst, newName);
Files.copy(src, dst);
请注意,您可以使用Path中的方法来帮助构建路径:.resolve、.resolveSibling、.relativize

编辑:这是一个函数,在给定目录dir、基本文件名baseName和不带点扩展名的扩展名的情况下,该函数将返回一个合适的名称:


很晚了。但是我的代码可以帮助你提高一点

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如果存在文档1.doc如果存在文档2.doc如果存在。。。
2.将所有文件从仅源文件复制到目标文件夹中的一个文件夹中

很晚。但是我的代码可以帮助你提高一点

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如果存在文档1.doc如果存在文档2.doc如果存在。。。
2.将所有文件从仅源文件复制到目标中的一个文件夹

下面的代码检查目标中是否已存在该文件,如果已存在,则在扩展名之前的文件名后面加上1。如果该文件名也存在,它会不断追加2,3,4。。。直到目标中不存在文件名。因为和空间在Unix环境中会产生问题,所以我改用了

您可以对此进行扩展,并执行SUMCHECK,检查目标中具有相同名称的文件是否也具有相同的内容,并相应地执行操作

功劳归于


下面的代码检查目标中是否已经存在该文件,如果已经存在,则在扩展名之前的文件名后面追加1。如果该文件名也存在,它会不断追加2,3,4。。。直到目标中不存在文件名。因为和空间在Unix环境中会产生问题,所以我改用了

您可以对此进行扩展,并执行SUMCHECK,检查目标中具有相同名称的文件是否也具有相同的内容,并相应地执行操作

功劳归于


Uhmwait,你为什么要浏览文件对象?如果要直接创建路径,请使用Paths.get如果方法存在,是否考虑使用If?您可以在此处阅读:。这可能会解决你的问题。@fge-mmm好的!!这将为我节省代码:D.我对java真的很陌生,而且是一个自学成才的人!无论如何,我一直在想如何检查文件是否存在,如果存在,如何重命名它或新的文件,以便两者都可以保存在同一个目录中!谢谢你的评论!!对不起,我的英语不是说英语的:@ViRALiC,谢谢!!阅读并尝试@neopablo2000很好,很高兴能为您提供帮助:Uhmwait,您为什么要查看文件对象?如果要直接创建路径,请使用Paths.get如果方法存在,是否考虑使用If?您可以在此处阅读:。这可能会解决你的问题。@fge-mmm好的!!这将为我节省代码:D.我对java真的很陌生,而且是一个自学成才的人!无论如何,我一直在想如何检查文件是否存在,如果存在,如何重命名它或新的文件,以便两者都可以保存在同一个目录中!谢谢你的评论!!对不起,我的英语不是说英语的:@ViRALiC,谢谢!!阅读并尝试@neopablo2000很好,很高兴能提供帮助:嗯,OP使用Java7。。。有个文件存在。更重要的是,文件的.exists被破坏,而没有将File.encoding考虑在内account@fge好吧,苏欧。。。弄清楚如何编写代码xD@fge我按照你关于路径的建议创建了我的hacia路径。我是这样做的:Path hacia=Path.getSystem.getPropertyuser.home、sistema、imagen.jpg;通过这种方式,我使我的代码更加可移植。问题是它给了我们什么

这是一个错误。。思考正在创建user.home我的根文件夹。。可能是权限问题?@fge我在JOptionPane.showMessageDialog中发现IOException e和e.getMessage的错误。它只显示源路径,即:c:\foo\foo.jpg,然后是这个符号:->然后是正确的命运路径(在我的例子中是:c:\documents and settings\pablo\sistema\imagen.jpg),没有错误消息,仅此而已!这远远不够信息!至少在控制台或其他地方记录异常。至少需要异常类。许多FileSystemException仅将路径名作为messageUhm,OP使用Java 7。。。有个文件存在。更重要的是,文件的.exists被破坏,而没有将File.encoding考虑在内account@fge好吧,苏欧。。。弄清楚如何编写代码xD@fge我按照你关于路径的建议创建了我的hacia路径。我是这样做的:Path hacia=Path.getSystem.getPropertyuser.home、sistema、imagen.jpg;通过这种方式,我使我的代码更加可移植。问题是它给出了一个错误。。思考正在创建user.home我的根文件夹。。可能是权限问题?@fge我在JOptionPane.showMessageDialog中发现IOException e和e.getMessage的错误。它只显示源路径,即:c:\foo\foo.jpg,然后是这个符号:->然后是正确的命运路径(在我的例子中是:c:\documents and settings\pablo\sistema\imagen.jpg),没有错误消息,仅此而已!这远远不够信息!至少在控制台或其他地方记录异常。至少需要异常类。许多FileSystemException只有路径名作为消息,这是现成的,非常感谢!!;-。还有一个问题可以满足我的好奇心。。有没有办法在FOR循环中使用此方法?我的意思是,如果imagen.jpg存在,那么将其重命名为imagen2.jpg,但是如果imagen2.jpg存在,那么将其重命名为imagen3.jpg,依此类推!前景。。很抱歉,你的时间,非常感谢,我可以考虑我的问题广泛回答:非常感谢你的FGE,Vialic和TrimMrWILIS花时间来回答我的,也许,愚蠢的和新手问题:但我今天学到了很多!我还有很多东西要学!但是像你这样的人走的是这条路,而不是这门课;-对我们来说容易多了!继续努力!在for循环中,您需要测试不同的名称;请参阅“编辑”以获取解决方案我想我对您的感谢之情已到极点!!我真的很感谢你的帮助,还有这段代码-你好我尝试了返回合适名称的代码,但这里有一个小问题:Path ret=Path.getdir,String.format%s.%s,baseName,extension;它说这个方法只需要String,String,而不是Path,String:。这是现成的,非常感谢!!;-。还有一个问题可以满足我的好奇心。。有没有办法在FOR循环中使用此方法?我的意思是,如果imagen.jpg存在,那么将其重命名为imagen2.jpg,但是如果imagen2.jpg存在,那么将其重命名为imagen3.jpg,依此类推!前景。。很抱歉,你的时间,非常感谢,我可以考虑我的问题广泛回答:非常感谢你的FGE,Vialic和TrimMrWILIS花时间来回答我的,也许,愚蠢的和新手问题:但我今天学到了很多!我还有很多东西要学!但是像你这样的人走的是这条路,而不是这门课;-对我们来说容易多了!继续努力!在for循环中,您需要测试不同的名称;请参阅“编辑”以获取解决方案我想我对您的感谢之情已到极点!!我真的很感谢你的帮助,还有这段代码-你好我尝试了返回合适名称的代码,但这里有一个小问题:Path ret=Path.getdir,String.format%s.%s,baseName,extension;它表示此方法只接受String,String,而不接受Path,String:。