在文件夹之间移动文件的意外结果

时间:2016-06-06 14:11:49

标签: java

我正在尝试为Java程序添加一个非常简单的功能。我想要添加的功能只是将所有文件从两个文件夹移动到第三个文件夹" archive"夹。代码很简单,我理解它100%问题只是文件夹的一个内容被移动。我用细齿梳子检查了代码并尝试多次重新编写目录,似乎没什么用。如果有人能帮我弄清楚为什么我的第二个文件夹的内容没有被移动我真的很感激。

仅供参考,为了测试此代码,您需要将几个文件夹添加到"我的文档"。 " Pain008Files"," Camt54文件"和"存档"。此外,您只需要将一些类型的文本文件添加到Pain008和Camt5文件夹中,它只能随机写一些可以移动的字母。

在运行时,Pain008Files文件夹正确地将所有文件移动到存档文件夹。 Camt54文件没有。我能想到的唯一问题是,Camt54文件名中的空格可能会引起问题,但这并不合理,所以我想在改变它之前我会暂时停止,直到得到一些帮助。提前谢谢!

主类

package fileHandling;

public class moveTestMain 

{

    public static void main(String args[]){

        GetUser gUser = new GetUser();
        gUser.getUser();

        MoveFiles mFiles = new MoveFiles();
        mFiles.moveCamtFiles();
        mFiles.movePainFiles();

    }

}

获取用户名类

package fileHandling;

public class GetUser

{

    public static String currentUser = null;

    public void getUser(){

        currentUser = System.getProperty("user.name");

    }

}

移动文件类

package fileHandling;

import java.io.File;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;

public class MoveFiles 

{

    public static ArrayList<File> pain008Files;
    public static ArrayList<File> camt54Files;;

    public void movePainFiles(){

        File pain008File = new File("C:\\Users\\"+GetUser.currentUser+"\\Documents\\Pain008Files");
        pain008Files = new ArrayList<File>(Arrays.asList(pain008File.listFiles()));

        System.out.println(pain008Files);

        for(int i = 0; i < pain008Files.size(); i++){

            System.out.println("Test");

            int cutAmount = GetUser.currentUser.length();

            String fileName = pain008Files.get(i).toString().substring(33+cutAmount,pain008Files.get(i).toString().length());

            System.out.println(fileName);


            System.out.println(pain008Files.get(i).toString());

            pain008Files.get(i).renameTo(new File("C:\\Users\\"+GetUser.currentUser+"\\Documents\\archive\\"+
            "archivedPain_"+fileName));


    }

    }

    public void moveCamtFiles(){

        File camt54File = new File("C:\\Users\\"+GetUser.currentUser+"\\Documents\\Camt54 Files");

        camt54Files = new ArrayList<File>(Arrays.asList(camt54File.listFiles()));

        for(int i = 0; i < camt54Files.size(); i++){

            int cutAmount = GetUser.currentUser.length();

            String fileName = camt54Files.get(i).toString().substring(32+cutAmount,camt54Files.get(i).toString().length());

            camt54Files.get(i).renameTo(new File("C:\\Users\\"+GetUser.currentUser+"\\Documents\\archive\\"+
            "archivedCamt_"+fileName));

        }

    }

1 个答案:

答案 0 :(得分:1)

简短回答:

你的代码在路线或某处有一些拼写错误......

LONG ANSWER:

我在计算机中将其调整为本地测试并且工作正常。

public void movePainFiles() {

    File pain008File = new File("C:\\tmp\\pain");
    pain008Files = new ArrayList<File>(Arrays.asList(pain008File.listFiles()));

    System.out.println(pain008Files);

    for (int i = 0; i < pain008Files.size(); i++) {

        System.out.println(pain008Files.get(i).toString());

        pain008Files.get(i).renameTo(new File("C:\\tmp\\archive\\" + "archivedPain_" + pain008Files.get(i).getName()));

    }

}

public void moveCamtFiles() {

    File camt54File = new File("C:\\tmp\\camt");

    camt54Files = new ArrayList<File>(Arrays.asList(camt54File.listFiles()));

    for (int i = 0; i < camt54Files.size(); i++) {

        System.out.println(camt54Files.get(i).toString());
        camt54Files.get(i).renameTo(new File("C:\\tmp\\archive\\" + "archivedCamt_" + camt54Files.get(i).getName()));

    }

}

输出:

C:\tmp\camt\xxx.pdf
C:\tmp\camt\yyy.pdf
C:\tmp\camt\zzz.pdf
[C:\tmp\pain\Q37024973.txt, C:\tmp\pain\Q37545784.txt]
C:\tmp\pain\Q37024973.txt
C:\tmp\pain\Q37545784.txt