从目录中选择一个文件/文件夹

selecting one file/folder from the directory

提问人:Red 提问时间:4/2/2022 最后编辑:Red 更新时间:4/17/2022 访问量:238

问:

我正在构建一个程序,用于管理 java(io、nio、apache commons-io)库中从文件夹“a”到“b”的文件和文件夹的数量和分布。

我被困在一个点上,我可以将文件从“a”移动到“b”,但不能移动“a”的子文件夹(目录),反之亦然,我可以移动子文件夹但不能移动文件,有一次它让我发笑,因为它移动了文件和包含在“a”的子文件夹中的文件, 但不是文件夹。

问题是我不想在一对一的副本中将整个“A”复制到“B”,我正在构建一个管理工具,将每个“x”项(文件或文件夹)放在子“B”文件夹中。

我可以管理管理和细分的那部分。但是,如果正确调用,我被困在指针上,我无法让它一次指向“一个”文件夹/文件的文件夹和文件,以便程序处理。

如果我的解释不清楚,我们深表歉意。

编辑: 我能想到的最后一件事是将其解析为数组,但没有成功。 对于主,它只有指向位置的字符串,如果路径存在参数,则调用 copy 方法。

编辑#2:注意到我没有提到在main中会有一个整数与init和limit相关;其目的是将每个子文件夹的复制限制为“B”。

参考代码 :

    public static boolean copyRecurse(String source, String destination, int limit,int init){

    if (limit <= 0){System.out.println("Exiting..."); return true;}
    if (limit == init){System.out.print("copying");}
    System.out.println(".");

    //copies the whole directory as is
    /*
    try {
        copyDirectory(new File(source), new File(destination));
    }catch (IOException e) {e.printStackTrace();}
    */


    // failed attempt to make it copy by one subfolder/file at a time
    try {
    copyFile(new File(String.valueOf(Arrays.stream(Objects.requireNonNull(new File(source).listFiles())).findFirst())), new File(destination));
    }catch (IOException e) {e.printStackTrace();}


    copyRecurse(source,destination,limit-1,init);
    return true;
}
java nio apache-commons-io

评论

0赞 DuncG 4/3/2022
添加您的代码将使其他人更容易帮助您,而不是描述。
0赞 Community 4/3/2022
请提供足够的代码,以便其他人可以更好地理解或重现问题。

答:

0赞 Red 4/17/2022 #1

显然,在commons IO方法中有一个解析为数组的方法,称为“File[]"

注意:它是在递归函数或双循环中递增“incrementasingInteger”和“index” 所以你可以建立一个文件夹限制结构,即 (“increaseInteger” = part)

目标文件夹

|第1部分

||第 1 部分中的项目(文件夹和文件)数

|第2部分

||第 2 部分中的项目(文件夹和文件)数

|第 3 部分

||Part3 中的项目(文件夹和文件)数

对于我的情况(选择文件或文件夹),这就是我想出的:

File srcFolder = new File(source);
    File[] listOfFiles = srcFolder.listFiles();


    try {
        if (listOfFiles[index].isDirectory()) {

            FileUtils.moveDirectoryToDirectory(listOfFiles[index], new File(destination + "\\subDestination"+ increasingInteger), false);
        }
        if (listOfFiles[index].isFile()){

            FileUtils.moveFileToDirectory(listOfFiles[limit], new File(destination + "\\subDestination"+ increasingInteger),false);
        }