将一个文件夹从一个位置移动到另一个位置

时间:2015-04-06 19:01:01

标签: java

我试图将一个文件夹从c:\ root移动到另一个地方,比方说,直接使用下面的代码到项目文件夹。变量newFolder被声明为类变量,它已被用于另一种方法,用户可以将文件夹重命名为其他名称,并保存我要移动的文件夹的名称。变量fileManager用于我想移动文件夹的新文件夹。当我运行此代码时,我总是得到"Folder " + fileManager.getName() + " is not moved."。因此,出于某种原因,它会跳过if条件并转到else而不移动我想要的文件夹。有人可以告诉我如何修改我的代码,以便将一个文件夹从一个地方移动到另一个地方吗?

File fileManager = new File(newFolder.getName());
try{                
    if(fileManager.renameTo(new File(fileManager.getName()))){
        System.out.println("Folder " + fileManager.getName() + " is moved.");
    }else{
        System.out.println("Folder " + fileManager.getName() + " is not moved.");
    }
}catch(Exception ex){
    System.out.println("Error - Folder not found!");
}

2 个答案:

答案 0 :(得分:1)

您需要在现有文件上致电renameTo()

您的代码当前正在尝试将新文件夹(fileManager)重命名为某个内容,但新文件夹(可能)在您的文件系统中不存在,因此它返回false,因为没有任何内容可以重命名。

实际上,我无法在此代码中的任何位置看到任何看起来像原始文件句柄的内容,但您需要原始文件才能重命名。

您的代码实际上什么都不做,因为它只是将文件重命名为自己:

fileManager.renameTo(new File(fileManager.getName())

如果操作系统上已存在该文件,我不确定这是返回true还是false。它是否算作成功重命名"如果您将文件重命名为自己?

你可能想要看起来更像这样的东西(猜测变量名):

oldFileOrFolder.renameTo(fileManager)

我还摆脱了新的File构造函数,因为你的对象已经是File类型。

答案 1 :(得分:0)

我会使用Files.move方法,我没有遇到任何问题。下面是使用文件而不是文件夹的示例。

static File fileManager = new File("C:\\template.xls");

public static void main(String[] args) throws IOException {
        Path originalPath = Paths.get(fileManager.getPath());
        Path newPath = Paths.get(System.getProperty("user.dir")+ "\\template.xls");

        if(Files.move(originalPath, newPath , StandardCopyOption.REPLACE_EXISTING) != null){
            System.out.println("Folder " + fileManager.getName() + " is moved.");
        }else{
            System.out.println("Folder " + fileManager.getName() + " is not moved.");
        }

 }

正如gnomed建议的那样,你也可以通过在原始文件夹/文件上调用renameTo方法解决你的问题,在这种情况下,它可能是'newFolder'(令人困惑的名字),因为它看起来像是一个实际的引用一份文件。以下是修订版的代码。

static File newFolder = new File("C:\\template.xls");

public static void main(String[] args) {

    File fileManager = new File(newFolder.getName());
    try{                
        if(newFolder.renameTo(fileManager)){
            System.out.println("Folder " + fileManager.getName() + " is moved.");
        }else{
            System.out.println("Folder " + fileManager.getName() + " is not moved.");
        }
    }catch(Exception ex){
        System.out.println("Error - Folder not found!");
    }
}