我需要将文件从工作目录复制到存档目录,因此我使用以下代码:
private void copyToArchive(Date today) {
try {
File source = new File("final.txt");
String msg = "getting source file " + source;
displayMessage(msg, good); // good points to a sound file
File destination = new File("archives\\final." + today + ".txt");
msg = "getting destination file " + destination;
displayMessage(msg, good);
FileUtils.copyFile(source, destination);
msg = "finished trying to copy file";
displayMessage(msg, good);
} catch (IOException ex) {
String message = "archiving failed";
displayMessage(message, bad);
Logger.getLogger(FileManagerController.class.getName()).log(Level.SEVERE, null, ex);
}
}
问题是,这在IDE中运行良好,但在生产中它只能成功地声明“目标”。在IDE中,我得到了“完成尝试复制文件”通知(以及子目录“archives”中复制的文件),但在生产中,我从NEException catch获取确认NOR“存档失败”通知(和子目录中没有复制的文件。)
帮助?
(我运行NetBeans 7.4,程序在JDK版本1.7.0_55上运行(无法升级,因为我们运行的另一个java程序不能在以后的java版本上运行)。)
答案 0 :(得分:0)
我不确定这是不是你的问题,但是
File destination = new File("archives\\final." + today + ".txt");
应该是
File destination = new File("archives","final." + today + ".txt");
可移植到\\
不是目录分隔符的文件系统。
答案 1 :(得分:0)
您可以尝试使用Java工作目录。它可以通过以下方式检索:
String workingDir = System.getProperty("user.dir");
这将返回您项目的路径。
因此,在您的情况下,您的代码将如下所示:
private void copyToArchive(Date today) {
try {
File source = new File("final.txt");
String msg = "getting source file " + source;
displayMessage(msg, good); // good points to a sound file
File destination = new File(workingDir + "archives\\final." + today + ".txt");
msg = "getting destination file " + destination;
displayMessage(msg, good);
FileUtils.copyFile(source, destination);
msg = "finished trying to copy file";
displayMessage(msg, good);
} catch (IOException ex) {
String message = "archiving failed";
displayMessage(message, bad);
Logger.getLogger(FileManagerController.class.getName()).log(Level.SEVERE, null, ex);
}
}
重要提示:也许您还需要编写文件权限。在这里,您有一个如何阅读/设置权限的非常好的示例:http://www.mkyong.com/java/how-to-set-the-file-permission-in-java/