所以我想实现一个将文件复制到一个新文件的函数,我将指定该目录(我将创建它),然后,正如我在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();
instanciation以确保,因此我将有以下代码:
(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())来检查它的路径,它构造得很好。
提前感谢您的帮助。
答案 0 :(得分:2)
第二个例子中的路径较短。 mkdir()
只会创建一个子目录,所以如果你去两个子目录就会失败,当你尝试在该目录中使用一个文件时,它也会失败。
我怀疑你想要的是mkdirs()
,它会根据需要创建多级目录。
答案 1 :(得分:0)
此
String pathOfDirectoryOfToFile= "Folder/" + allFirmsFolderName +"/" + firmFolderName +"/" ;
String pathOfToFile = pathOfDirectoryOfToFile + "/" + copy_file_name ;
看起来很可疑。它产生
"Folder/" + allFirmsFolderName +"/" + firmFolderName +"//" + copy_file_name ;