复制目录/文件夹程序错误(Java)

复制目录/文件夹程序错误(Java),java,file,netbeans,mkdir,Java,File,Netbeans,Mkdir,我想知道是否有人可以帮助我的程序,因为我不知道我在写它的时候哪里出错了。我的程序步骤如下: 向用户询问源目录和目标。源是要复制的目录;目标是新副本的父目录 首先,您的程序应该在新位置创建一个与源目录同名的新目录。(如果要复制整个磁盘,可能需要对根目录执行一些特殊操作。根目录没有父目录,通常也没有名称。) 然后,您的程序应该为源目录内容中的每个项创建一个包含文件类对象的数组 接下来,它应该迭代数组,并为数组中的每个项迭代 1.如果是文件,请使用copyFile()方法将文件复制到新目录 如果它是一

我想知道是否有人可以帮助我的程序,因为我不知道我在写它的时候哪里出错了。我的程序步骤如下:

  • 向用户询问源目录和目标。源是要复制的目录;目标是新副本的父目录

  • 首先,您的程序应该在新位置创建一个与源目录同名的新目录。(如果要复制整个磁盘,可能需要对根目录执行一些特殊操作。根目录没有父目录,通常也没有名称。)

  • 然后,您的程序应该为源目录内容中的每个项创建一个包含文件类对象的数组

  • 接下来,它应该迭代数组,并为数组中的每个项迭代 1.如果是文件,请使用copyFile()方法将文件复制到新目录

  • 如果它是一个目录,递归调用此方法复制目录及其所有内容
  • 我的代码如下所示,我不明白我在这个程序中犯了什么错误,但不管输出结果是什么,“文件不存在”

    import java.io.*;
    导入java.util.Scanner;
    公共类DirectCopy{
    公共静态void main(字符串[]args)引发异常{
    //创建扫描仪的新实例以获取用户输入
    扫描仪=新的扫描仪(System.in);
    //要求用户输入要复制的目录
    System.out.print(“输入要复制的目录”);
    //将输入另存为字符串
    String dirName=scanner.nextLine();
    //要求用户输入复制方向的目的地
    System.out.print(“输入目标目录将移动到。”);
    //将输入另存为字符串
    字符串destName=scanner.nextLine();
    //运行方法以确定它是目录还是文件
    isDirFile(dirName,destName);
    }//端干管
    公共静态void isDirFile(字符串源、字符串目标)引发异常{
    //使用相同的名称在新位置为新目录创建文件对象
    //作为源目录
    文件dirFile=新文件(dest+源);
    //创建新目录
    mkdirs();
    //为源中的每个项创建文件类对象数组
    //目录
    文件[]项;
    //如果源目录存在
    if(dirFile.exists()){
    //如果源目录是一个目录
    if(dirFile.isDirectory()){
    //获取数据并加载数组
    entries=dirFile.listFiles();
    //使用alternate for语句迭代数组
    用于(文件条目:条目){
    if(entry.isFile()){
    copyFile(entry.getAbsolutePath(),dest);
    }//如果结束,则结束
    否则{
    isDirFile(entry.getAbsolutePath(),dest);
    }//如果需要,则结束
    }//结束
    }//如果结束
    }//如果结束
    否则{
    System.out.println(“文件不存在”);
    }//结束其他
    }
    公共静态void copyFile(字符串源、字符串目标)引发异常{
    //声明文件
    File sourceFile=null;
    File destFile=null;
    //声明流变量
    FileInputStream sourceStream=空;
    FileOutputStream destStream=null;
    //声明缓冲变量
    BufferedInputStream bufferedSource=null;
    BufferedOutputStream BufferedTest=null;
    试一试{
    //为源文件和目标文件创建文件对象
    sourceFile=新文件(源);
    destFile=新文件(dest);
    //为源和目标创建文件流
    sourceStream=新文件输入流(sourceFile);
    destStream=新文件输出流(destFile);
    //缓冲大小为8k的文件流
    bufferedSource=新的BufferedInputStream(sourceStream,8182);
    BufferedTest=新的BufferedOutputStream(destStream,8182);
    //使用整数在文件之间传输数据
    整数转移;
    //提醒用户正在发生的事情
    System.out.println(“开始文件副本:”);
    System.out.println(“\t复制”+源代码);
    System.out.println(“\tTo”+dest);
    //检查文件结尾(EOF)时读取字节
    而((transfer=bufferedSource.read())!=-1){
    //写一个字节
    缓冲测试写入(传输);
    }//结束时
    }//结束尝试
    捕获(IOE异常){
    e、 printStackTrace();
    System.out.println(“发生意外的I/O错误”);
    }//端接
    最后{
    //关闭文件流
    if(bufferedSource!=null)
    bufferedSource.close();
    如果(BufferedTest!=null)
    bufferedtest.close();
    System.out.println(“您的文件已正确复制,并且”
    +“已关闭。”);
    }//最后结束
    }//结束copyDir
    
    }//结束类
    假设
    目标
    类似于
    C:\
    D:\New dest
    ,问题可能就在这一行:
    File dirFile=New File(目标+源)

    根据,该构造函数将类似于一个文件,该文件是两个字符串的串联。在上面的示例中,这将产生类似于
    D:\newdest\C:
    的结果

    以下代码不会失败:

        File a = new File("C:" + "D:\\New Dest");
        a.mkdirs();
        System.out.println(a.getAbsolutePath());
    
    但是,似乎没有创建任何目录。我认为您需要做的是重命名:
    filedirfile=newfile(dest+source)到类似以下内容:

    File dirFile = new File (dest, new File(source).getName());
    
    它应该创建您要查找的目录结构。请注意,对于根目录,
    getName()
    将为空

    编辑:根据您的评论,正如@vincent所提到的,您正在创建一个新目录,称之为
    dirFile
    ,您将在其中放置
    source
    指定的相同目录结构的副本。问题是:
    entries=dirFile.listFiles()