Java文件复制到非空目标文件夹

Java文件复制到非空目标文件夹,java,file,path,move,Java,File,Path,Move,在不使用FileUtils导入的情况下,我很难弄清楚这需要如何编码。我已经找到了数千本关于如何将文件移动到空文件夹的教程,这很简单。困难在于找出Java如何将文件移动到文件夹中已有文件的目录中。据我所知,REPLACE_EXISTING参数意味着如果在目标目录中检测到相同的文件名,它将覆盖相同的文件名,但该目录中没有与我尝试复制/移动的文件名匹配的文件。我错过了什么?我怎样才能做到这一点 发生java.nio.file.DirectoryNotEmptyException enter code

在不使用FileUtils导入的情况下,我很难弄清楚这需要如何编码。我已经找到了数千本关于如何将文件移动到空文件夹的教程,这很简单。困难在于找出Java如何将文件移动到文件夹中已有文件的目录中。据我所知,REPLACE_EXISTING参数意味着如果在目标目录中检测到相同的文件名,它将覆盖相同的文件名,但该目录中没有与我尝试复制/移动的文件名匹配的文件。我错过了什么?我怎样才能做到这一点

发生java.nio.file.DirectoryNotEmptyException

enter code here

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;



public class Move {
 static File source = new File("sourcefolderhere");
static File destination = new File("destfolderhere");


public static void move(File src, File dest) throws IOException {
    Files.move(src.toPath().toAbsolutePath(), dest.toPath().toAbsolutePath(),
            StandardCopyOption.REPLACE_EXISTING);         
}

public static void main(String[] args) throws IOException { 

try {       
    if(source.isDirectory() && destination.isDirectory()) {         
        File[] content = source.listFiles();           
        for(int i = 0; i < content.length; i++) {
            System.out.println(content[i]);  
            move(source, destination);                
        }            
    }
    else if (!destination.isDirectory()){ 
        System.out.println("create folder here");
        destination.mkdir();
        File[] content = source.listFiles();           
        for(int i = 0; i < content.length; i++) {
            move(source, destination);              
        }
    }
 }
 catch(Exception ex) {   System.out.println(ex);    
 }
 finally {
    
 }
 }
 }
在此处输入代码
导入java.io.File;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.StandardCopyOption;
公开课运动{
静态文件源=新文件(“sourcefolderhere”);
静态文件目的地=新文件(“destfolderhere”);
公共静态无效移动(文件src、文件dest)引发IOException{
文件.move(src.toPath().toAbsolutePath(),dest.toPath().toAbsolutePath(),
StandardCopyOption。替换_现有);
}
公共静态void main(字符串[]args)引发IOException{
试试{
if(source.isDirectory()&&destination.isDirectory()){
File[]content=source.listFiles();
for(int i=0;i
我尝试了IDE File.move方法中的代码,参数为StandardCopyOption.REPLACE\u只有在目标文件夹中有文件时,才能使用现有的方法。否则使用File.move以正常方式移动。我还对您的代码进行了一些修改,以避免代码重复

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;

public class Move {
    static File source = new File("sourcefolderhere");
    static File destination = new File("destfolderhere");

    public static void move(File src, File dest) throws IOException {
        System.out.println(src.getName());
        if(isExist(src.getName()))
            Files.move(src.toPath().toAbsolutePath(), Paths.get(destination.getAbsolutePath()+File.separator+src.getName()) , StandardCopyOption.REPLACE_EXISTING);
        else
            Files.move(src.toPath().toAbsolutePath(), Paths.get(destination.getAbsolutePath()+File.separator+src.getName()));
    }
    
    public static boolean isExist(String souceFileName){
        //If you are not using java 8 code
        /*String[] destFiles = destination.list();
        for(String fileName : destFiles){
            if(souceFileName.equals(fileName))
                return true;
        }
        return false;*/
        return Arrays.stream(destination.list())
                .anyMatch(fileName -> fileName.equals(souceFileName));
    }

    public static void main(String[] args) throws IOException {

        try {
            if(!source.isDirectory())
                throw new IllegalArgumentException("Source Folder doesn't Exist");
            if(!destination.exists())
                destination.mkdir();
            if (source.isDirectory() && destination.isDirectory()) {
                File[] content = source.listFiles();
                for (int i = 0; i < content.length; i++) {
                    System.out.println(content[i]);
                    move(content[i], destination);
                }
            }
        } catch (Exception ex) {
            System.out.println(ex);
        } finally {

        }
    }
}```
import java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.path;
导入java.nio.file.StandardCopyOption;
导入java.util.array;
公开课运动{
静态文件源=新文件(“sourcefolderhere”);
静态文件目的地=新文件(“destfolderhere”);
公共静态无效移动(文件src、文件dest)引发IOException{
System.out.println(src.getName());
if(isExist(src.getName()))
Files.move(src.toPath().toabsolutionPath(),path.get(destination.getAbsolutePath()+File.separator+src.getName()),StandardCopyOption.REPLACE_EXISTING);
其他的
Files.move(src.toPath().toabsolutionPath(),path.get(destination.getAbsolutePath()+File.separator+src.getName());
}
公共静态布尔isExist(字符串souceFileName){
//如果您没有使用Java8代码
/*字符串[]destFiles=destination.list();
for(字符串文件名:destFiles){
if(sousefilename.equals(fileName))
返回true;
}
返回false*/
返回Arrays.stream(destination.list())
.anyMatch(文件名->文件名.equals(源文件名));
}
公共静态void main(字符串[]args)引发IOException{
试一试{
如果(!source.isDirectory())
抛出新的IllegalArgumentException(“源文件夹不存在”);
如果(!destination.exists())
destination.mkdir();
if(source.isDirectory()&&destination.isDirectory()){
File[]content=source.listFiles();
for(int i=0;i
如果您知道目标目录中没有任何与正在复制/移动的源文件具有匹配名称的文件,则不存在冲突,目标目录也可能被视为空目录。我不明白你意识到的问题是什么。你到底想问什么?如果目录中已经有一个同名文件,你打算如何再次将另一个同名文件放在那里?我建议您添加另一个IF分支,并加上一个复选框:若有一个文件具有这样的名称,您可以将一个新文件的名称更改为其他值。如果没有->你可以正常复制文件。告诉我是否正确理解你的意图,我会给你一段代码,在一个循环中添加索引后缀,直到文件名是唯一的。请尝试这个snipet。它没有FileUtils
private static void copy(File src,File dest)抛出IOException{try(InputStream is=new FileInputStream(src);OutputStream os new FileOutputStream(dest){//缓冲区大小1K字节[]buf=new byte[1024];int bytesRead;while((bytesRead=is.read(buf))>0{os.write(buf,0,bytesRead);}}
REPLACE\u EXISTING不要求存在同名的现有文件。使用REPLACE\u EXISTING意味着如果存在同名的文件,则应将其覆盖。如果没有同名的现有文件,则将忽略REPLACE\u EXISTING。谢谢。我尝试了这一点,它仍然不会将文件复制到已包含cont的目录中ent.I仍然获取file.directoryNotemptyException我尝试了以下场景。destfldr->file1.txt sourcefldr->file1.txt,file2.txt。结果是destfldr->file1.txt,file2.txt和sourcefldr->nofile。这对我有效!文件移动是递归的吗?意味着它有嵌套的文件夹吗