Java Path Files.copy重命名(如果存在)
只是一个简单的问题,我很难找到答案:D。这是我的代码,我将尝试翻译西班牙语部分: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+
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:。