我是Java编程的真正初学者,所以我希望我不浪费任何时间。我尽力研究这个,但无法提出解决方案。
我正在关注Lynda视频系列“Java Essential Training”,到目前为止它一直非常好。我目前正在学习如何将文本文件的内容复制到新的文本文件中。但是,该视频通过从Apache commons下载commons IO并将.jar文件添加到项目中来显示另一种方法。
在视频中,jar文件已添加到构建路径中。我的eclipse版本似乎是自动执行,因为“Referenced Libraries”弹出,当我试图添加它时,eclipse说它已经存在了。
我完全按照视频。代码看起来像这样
package com.lynda.files;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class Main {
public static void main(String[] args) {
try {
File f1 = new File("loremipsum.txt");
File f2 = new File("target.txt");
FileUtils.copyDirectory(f1, f2);
System.out.println("File copied!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
当我运行代码时,我在控制台中收到了消息
java.io.IOException: Source 'loremipsum.txt' exists but is not a directory
at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1371)
at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1261)
at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1230)
at com.lynda.files.Main.main(Main.java:16)
在代码中它说导入的FileUtils但是eclipse告诉我“源附件不包含文件FileUtils.class的源”。我试图更改附加的源但它给了我错误“无法写入文件BlahBlahBlah.classpath(访问被拒绝)
希望我没有关于明显和简单的事情的无人机。我认为最好尽可能清楚,以防其他人遇到类似的问题。
修改
我觉得很蠢。谢谢您的帮助。我点击了“copyDirectory”而不是“copyFile”。下次,我会花时间浏览每一行并思考它的作用,而不是恐慌,谷歌搜索每一行错误并向人们寻求帮助。感谢大家的帮助和耐心。
答案 0 :(得分:2)
使用FileUtils.copyFile(f1, f2);
代替FileUtils.copyDirectory(f1, f2);
答案 1 :(得分:1)
我发现这可能对你有所帮助:
copyFile(File srcFile,File destFile)将文件复制到保留文件日期的新位置。
static void copyFile(File srcFile,File destFile,boolean preserveFileDate)将文件复制到新位置。
static long copyFile(File input,OutputStream output)将字节从File复制到OutputStream。
static void copyFileToDirectory(File srcFile,File destDir)将文件复制到保留文件日期的目录。
static void copyFileToDirectory(File srcFile,File destDir,boolean preserveFileDate)将文件复制到目录,可选择保留文件日期。
虽然它来自Apache站点,但它确实讨论了Java类。
答案 2 :(得分:1)
copyDirectory
的源和目标文件参数必须是目录,但是您要提供文本文件。
public static void copyDirectory(File srcDir,File destDir)
throws IOException
Copies a whole directory to a new location preserving the file dates.
This method copies the specified directory and all its child directories and files to the specified destination. The destination is the new location and name of the directory.
The destination directory is created if it does not exist. If the destination directory did exist, then this method merges the source with the destination, with the source taking precedence.
Note: This method tries to preserve the files' last modified date/times using File.setLastModified(long), however it is not guaranteed that those operations will succeed. If the modification operation fails, no indication is provided.
Parameters:
srcDir - an existing directory to copy, must not be null
destDir - the new directory, must not be null
Throws:
NullPointerException - if source or destination is null
IOException - if source or destination is invalid
IOException - if an IO error occurs during copying
Since:
1.1
(Source)
答案 3 :(得分:0)
请再次阅读错误消息:
源'loremipsum.txt'存在,但不是目录
这不完全是您在主题中所写的内容。实际上文件'loremipsum.txt'存在,但不是目录。这是常规文件。但是,您尝试调用FileUtils.copyDirectory()
并将此常规文件传递给此方法。但是这种方法还没有准备好处理文件。它仅支持目录。这正是错误信息中写的内容。
修改
现在问题是为什么你为那些参数肯定是文件的目录调用明确的方法?