【问题标题】:Two similar copy codes with Java, two behaviors两个与Java相似的复制代码,两个行为
【发布时间】:2013-05-13 09:45:58
【问题描述】:

所以我想实现一个函数,将文件复制到一个新文件中,我将指定目录(我将创建它),然后,正如我在 stackoverflow 上发现的那样,使用 Files.copy apache.commons 的 函数可以解决问题。

我的问题如下:我编写了两个代码,一个有效,另一个无效,除了它们非常相似,我似乎无法捕捉到差异......

这是第一种方法的代码:

public static void copyToFile2 (String firmFolderName, String allFirmsFolderName, String copy_file_name, String copied_file_name) throws IOException {

        File from = new File(copied_file_name) ;
        String pathOfDirectoryOfToFile= "Folder/" + allFirmsFolderName +"/" + firmFolderName ; 
        //String pathOfDirectoryOfToFile = "Folder/fomrs/firm/" ;
        String pathOfToFile = pathOfDirectoryOfToFile + "/" + copy_file_name ; 

        (new File(pathOfDirectoryOfToFile)).mkdir();
        File to = new File(pathOfToFile) ;

        Files.copy( from.toPath(), to.toPath() );

    }

在这一个中,我必须指定几个参数来创建一个目录的路径,创建该目录并最终在其中创建副本文件。它抛出 NoSuchFileException,虽然我知道该文件不存在,但我认为它可能会很好并自己创建它,但因为它没有:我继续并在文件实例化之后添加了 to.createNewFile();确保,因此我将有以下代码:

(new File(pathOfDirectoryOfToFile)).mkdir();
File to = new File(pathOfToFile) ;
to.createNewFile();

Files.copy( from.toPath(), to.toPath() );

有了这个,我得到一个 IOException 说明找不到指定的访问路径!

第二种方法:

public static void copyToFile1 (String firmFolderName, String allFirmsFolderName, String copy_file_name, String copied_file_name) throws IOException {

        File from = new File(copied_file_name) ;
        String pathOfDirectoryOfToFile= "Folder/" + allFirmsFolderName +"/" + firmFolderName +"/" ; 
        String pathOfToFile = pathOfDirectoryOfToFile + "/" + copy_file_name ; 

        (new File("Folder/mdjs55/")).mkdir();
        File to = new File("Folder/mdjs55/tm.jsp" ) ;


        Files.copy( from.toPath(), to.toPath() );

    }

在这个工作正常。

那是什么?我不能的唯一区别是 copyToFile2 中的路径是动态的,而第二个是静态的,但这应该是一个问题吗?据我所知,它只是一个正在构建的字符串......

P.S:我使用 System.out.println(to.toPath()) 来检查路径,它的结构很好。

提前感谢您的帮助。

【问题讨论】:

  • 你遇到了什么异常?
  • 在问题中提到了两个异常:NoSuchFile 和 IOException。
  • Files.copy 现在在 Java 7 中。Files.copy(from.toPath(), to.toPath(), StandardCopyOption.REPLACE_EXISTING); 可能有用。
  • @JoopEggen :不知道,它是否具有与 apache.commons 中的 File.copy 相同的机制?它们有何不同?
  • Java 世代不断集成通用库,但经常进行修订。 java.nio.file.Files 使用路径参数,你确定你还没有使用那个参数吗? FileUtils 来自 apache commons I/O,完全不同。

标签: java io java-io


【解决方案1】:

第二个示例中的路径较短。 mkdir() 只会创建一个子目录,所以如果你去两个子目录它会失败,当你尝试使用该目录中的文件时它也会失败。

我怀疑你想要的是mkdirs(),它会根据需要创建多级目录。

【讨论】:

  • 哦,有限的知识让我忽略了这种可能性,我会尝试并给你反馈!
  • @Gloserio 我认为如果有人知道 Java 的 10%,那将是致命的 ;)
  • 好吧,试过了,它确实创建了目录,但是 File.copy 现在很生气,因为它抛出了这个异常:java.nio.file.FileAlreadyExistsException: Folder\forms1\ Firms8\copy_jiji___1.jsp ,很有趣,因为我确保该目录和复制文件的名称都不存在......
  • 您使用的是哪种文件系统?如果它是基于 Windows 的,您可能会发现它不喜欢某些文件名。
  • 仍然很好奇:为什么 mkdir() 在 copyFile1 而不是在 copyFile2 中工作?
【解决方案2】:

这个

String pathOfDirectoryOfToFile= "Folder/" + allFirmsFolderName +"/" + firmFolderName +"/" ; 
String pathOfToFile = pathOfDirectoryOfToFile + "/" + copy_file_name ; 

看起来很可疑。它产生

"Folder/" + allFirmsFolderName +"/" + firmFolderName +"//" + copy_file_name ; 

【讨论】:

  • 哦,对不起,我犯了那个错误,但把它取下来了,好像我粘贴了一个旧代码。我仍然可以向您保证,即使消除了这个错误,我的问题仍然存在!
  • 我已经进行了编辑,感谢@Evgeniy Dorofeev 提及它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
相关资源
最近更新 更多