如何在Java中将文件从一个目录复制到另一个目录

6

我正在使用JDK 6

我有两个文件夹,它们的名称分别是Folder1Folder2

Folder1中有以下文件:

TherMap.txt

TherMap1.txt

TherMap2.txt

每次Folder2只有一个名为TherMap.txt的文件。
我的需求是,从folder1中复制任何文件,并将其粘贴到以TherMap.txt命名的Folder2中。如果Folder2中已经存在TherMap.txt,则删除并粘贴它。
我编写了以下代码,但它不起作用:
public void FileMoving(String sourceFilePath, String destinationPath, String fileName) throws IOException {
    File destinationPathObject = new File(destinationPath);
    File sourceFilePathObject = new File(sourceFilePath);
    if ((destinationPathObject.isDirectory()) && (sourceFilePathObject.isFile()))
    //both source and destination paths are available 
    {
        //creating object for File class
        File statusFileNameObject = new File(destinationPath + "/" + fileName);
        if (statusFileNameObject.isFile())
        //Already file is exists in Destination path
        {
            //deleted File
            statusFileNameObject.delete();
            //paste file from source to Destination path with fileName as value of fileName argument
            FileUtils.copyFile(sourceFilePathObject, statusFileNameObject);
        }
        //File is not exists in Destination path.
        {
            //paste file from source to Destination path with fileName as value of fileName argument
            FileUtils.copyFile(sourceFilePathObject, statusFileNameObject);
        }
    }
}

我在main()函数中调用上述函数。

 //ExternalFileExecutionsObject is class object
 ExternalFileExecutionsObject.FileMoving(
            "C:/Documents and Settings/mahesh/Desktop/InputFiles/TMapInput1.txt",
            "C:/Documents and Settings/mahesh/Desktop/Rods",
            "TMapInput.txt");

当我使用FileUtils函数时,它出现了错误,因此我单击错误,自动产生了以下代码的新包。
 package org.apache.commons.io;
 import java.io.File;
 public class FileUtils {
    public static void copyFile(File sourceFilePathObject,
        File statusFileNameObject) {
        // TODO Auto-generated method stub
    }
 }

我的代码没有显示任何错误,但是它不起作用。

我该如何修复它?

谢谢。


你还没有下载并添加对ApacheCommons的引用。相反,你只是在项目中创建了一个与copyFile模式匹配的方法存根。如果你打算使用ApacheCommons解决方案,你将需要下载整个库并添加对它的引用。 - Ted
此外,您需要删除所创建的copyFile方法存根,否则将出现模糊的方法调用。 - Ted
2个回答

9

使用 Apache CommonsFileUtils FileUtils.copyDirectory(source, desc); 进行文件夹复制。


我对Java方面还很陌生,你能详细解释一下吗?我需要在哪里修改我的代码? - ur truly friend
我想将一个文件从一个目录复制到另一个目录。我不想复制和粘贴整个目录,也不想一次性复制和粘贴所有文件。 - ur truly friend
@所有人 如果有人理解了这个答案,请告诉我。我正在使用“JRE 6”。 - ur truly friend
@urtrulyfriend,现在请删除您生成的FileUtils类(该类显示在您问题的下部),然后尝试按照我的答案所述的方式引用Commons FileUtils类。 - Charu Khurana
非常高兴它对你有用。作为一个初学者,你做得很好,使用了正确的资源。继续加油! - Charu Khurana
显示剩余4条评论

1
你的代码无法运行,因为要使用ApacheCommons解决方案,你需要下载在这里找到的ApacheCommons库:

http://commons.apache.org/

并添加一个引用。

由于您正在使用JRE 6,因此无法使用所有NIO文件实用程序,尽管每个人都喜欢将Apache Commons作为快速回答论坛帖子的方法,但您可能不喜欢只是为了获取一个函数而必须添加该实用程序。您还可以使用此代码,该代码使用transferFrom方法而不使用ApacheCommons。

public static void copyFile(File sourceFile, File destFile) throws IOException {
  if (!destFile.exists()) {
    destFile.createNewFile();
  }
  FileInputStream fIn = null;
  FileOutputStream fOut = null;
  FileChannel source = null;
  FileChannel destination = null;
  try {
    fIn = new FileInputStream(sourceFile);
    source = fIn.getChannel();
    fOut = new FileOutputStream(destFile);
    destination = fOut.getChannel();
    long transfered = 0;
    long bytes = source.size();
    while (transfered < bytes) {
      transfered += destination.transferFrom(source, 0, source.size());
      destination.position(transfered);
    }
  } finally {
    if (source != null) {
      source.close();
    } else if (fIn != null) {
      fIn.close();
    }
    if (destination != null) {
      destination.close();
    } else if (fOut != null) {
      fOut.close();
    }
  }
}

当您升级到7版时,您将能够执行以下操作。
public static void copyFile( File from, File to ) throws IOException {
    Files.copy( from.toPath(), to.toPath() );
}

参考资料:

https://gist.github.com/mrenouf/889747

Java中复制文件的标准简洁方法是什么?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接