0

我有以下代码将一个文件夹中的所有文件移动到另一个文件夹:

for(File file: sourcePath.listFiles()){
    log.debug("File = " + sourcePath + "\\" + file.getName())
    File f1 = new File("C:\\\\" + sourcePath + "\\" + file.getName())
    f1.renameTo(new File("C:\\\\" + destinationPath + "\\" + file.getName()))
}

这在本地运行良好,因为我在 Windows 机器上。

显然,当我将我的应用程序部署到我的 unix 测试/生产服务器时,它不起作用。

这是在 Grails 2.1.0 项目中。

是否可以在不诉诸条件语句的情况下做到这一点?(一些开发者会在本地使用 linux)。

更新

我必须使用 Java 6。

谢谢

4

2 回答 2

3

File.separator将为您提供一个系统相关的分隔符,"/"适用于类 unix 和"\"windows。File.separatorChar有相同的东西,但char类型。

此外,如果你可以使用 Java 7,NIO2 的 Path API 提供了更方便和干净的方式:

Path source = Paths.get("C:", sourcePath, file.getName());
Path target = Paths.get("C:", targetPath, file.getName());
Files.move(source, target);

有关文档,请参阅以下页面:

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Paths.html http://docs.oracle.com/javase/7/docs/api/java/nio/file /文件.html

于 2013-02-18T14:35:43.477 回答
0

工作解决方案:

File sourcePath = new File(config.deals.imageUploadTmpPath + "/test_" + testId)
File destinationPath = new File(config.deals.imageUploadPath + "/" + testId)

for(File file: sourcePath.listFiles()) {
    log.debug("File = " + sourcePath.getAbsolutePath() + File.separator + file.getName())

    File f1 = new File(sourcePath.getAbsolutePath() + File.separator + file.getName())
    f1.renameTo(new File(destinationPath.getAbsolutePath() + File.separator + file.getName()))

}

使用File.getAbsolutePath()可以解决问题。

于 2013-02-18T15:42:55.757 回答