我需要将一个文件从工作目录复制到归档目录,所以我使用以下代码:
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中工作得很好,但在生产环境中,它只有在声明"destination"时才成功。在IDE中,我得到了"完成尝试复制文件"通知(以及子目录"archives"中复制的文件),但在生产中,我既没有得到确认,也没有得到IOException捕获的"归档失败"通知(并且子目录中没有复制的文件)。
帮助吗?
(我运行NetBeans 7.4,程序在JDK 1.7.0_55版本上运行(无法升级,因为我们运行的另一个java程序将无法在以后的java版本上运行))。
我不确定这是不是你的问题,但是
File destination = new File("archives\final." + today + ".txt");
应该是
File destination = new File("archives","final." + today + ".txt");
用于可移植性到\
不是目录分隔符的文件系统
您可以尝试使用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/