Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个类似的Java复制代码,两种行为_Java_Io_Java Io - Fatal编程技术网

两个类似的Java复制代码,两种行为

两个类似的Java复制代码,两种行为,java,io,java-io,Java,Io,Java Io,因此,我想实现一个函数,将一个文件复制到一个新文件中,我将指定该文件的目录(我将创建它),然后,正如我在stackoverflow上发现的那样,使用apache.commons的Files.copy函数来完成这项任务 我的问题是:我写了两个代码,一个有效,另一个无效,只是它们非常相似,我似乎无法捕捉到差异 以下是第一种方法的代码: public static void copyToFile2 (String firmFolderName, String allFirmsFolderName, S

因此,我想实现一个函数,将一个文件复制到一个新文件中,我将指定该文件的目录(我将创建它),然后,正如我在stackoverflow上发现的那样,使用apache.commons的Files.copy函数来完成这项任务

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

以下是第一种方法的代码:

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() );

    }
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() );

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

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

Files.copy( from.toPath(), to.toPath() );
有了这个,我得到了一个IOException,声明找不到指定的访问路径

第二种方法:

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() );

    }
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中的路径是动态的,而第二个是静态的,但这怎么会是一个问题呢?据我所知,这只是一个正在构建的字符串

我使用System.out.println(to.toPath())来检查它的路径,它构造得很好


提前感谢你的帮助

第二个示例中的路径较短
mkdir()
将只创建一个子目录,因此如果您转到两个子目录,它将失败,并且当您尝试使用该目录中的文件时,它也将失败

我怀疑您想要的是
mkdirs()
,它可以根据需要创建多个级别的目录。

String pathOfDirectoryOfToFile= "Folder/" + allFirmsFolderName +"/" + firmFolderName +"/" ; 
String pathOfToFile = pathOfDirectoryOfToFile + "/" + copy_file_name ; 
看起来可疑。它产生

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

您得到了什么异常?在问题中提到了两个异常:NoSuchFile和IOException.Files.copy现在在Java 7中<代码>文件.copy(从.toPath()复制到.toPath(),StandardCopyOption.REPLACE_现有)
可能有用。@JoopEggen:我不知道,它是否具有与apache.commons中的File.copy相同的机制?它们之间有多大的不同?Java世代不断地集成通用库,尽管经常进行修改
java.nio.file.Files
使用路径参数,您确定还没有使用该参数吗?FileUtils来自ApacheCommons I/O,完全不同。哦,有限的知识让我忽略了这种可能性,我会尝试一下,并给你一个反馈@Gloserio我认为,如果有人对Java有10%的了解,那将是致命的;)好的,尝试过了,它确实创建了目录,但是File.copy现在很生气,因为它抛出了这个异常:java.nio.File.filealreadyexistException:Folder\forms1\firms8\copy\u jijiji\u\u\u 1.jsp,非常有趣,因为我确保了该目录和复制文件的名称都不存在……您使用的是哪种文件系统?如果它是基于Windows的,您可能会发现它不喜欢某些文件名。但仍然很好奇:为什么mkdir()在copyFile1中工作而在copyFile2中不工作?哦,很抱歉,我犯了这个错误,但将其删除了,似乎我粘贴了一个旧代码。尽管如此,我可以向你保证,即使这个错误被消除了,我的问题仍然是正确的!我已经做了编辑,谢谢你提到@Evgeniy dorofev