1

我要在 scala 中复制一个文件,但出现 FileNotFound 错误,资产文件夹位于 src 所在的同一目录中:

val src = new File("/assets/public/images/default/male.jpg")
val dest = new File("/assets/public/images/profile/male1.jpg")

new FileOutputStream(dest) getChannel() transferFrom(
new FileInputStream(src) getChannel, 0, Long.MaxValue )
4

3 回答 3

2

在您的代码中,您尝试使用FileOutputStream复制文件,这需要现有文件的有效路径,否则它将抛出FileNotFoundException(请参阅此处的文档)

val src = new File("/assets/public/images/default/male.jpg")
val dest = new File("/assets/public/images/profile/male1.jpg")
new FileOutputStream(dest) //dest should exist

不过,Play 有自己的实用程序来复制文件。这是链接

import play.api.libs.Files
Files.copyFile(src, dest, true, true)
println(dest.getAbsolutePath())  // filepath of copied file

此外,由于文件被复制到工作目录,您可能无法在您喜欢的 IDE 的文件夹结构中看到新文件。

除此之外,您可以通过使用获得公共资产的路径routes

val srcPath = routes.Assets.at("public/images/default/male.jpg").url
于 2013-10-02T08:50:05.163 回答
0

您的措辞有点模棱两可,您似乎打算给出相对于当前工作目录的路径。这意味着该代码应该从包含该assets目录的目录中执行。如果是这样,那么您犯了一个错误并给出了文件对象的绝对路径,而不是相对路径。您所要做的就是从这些路径中删除初始的正斜杠,它应该可以工作。

实际上,您是在告诉 Scala/Java 在根目录中查找assets.

于 2013-10-02T09:48:57.717 回答
0

一般建议

在 Java 上复制文件时,请使用FileUtils.copy(...)Apache commons 项目中的 。

针对您的具体问题

如果正在运行的进程找不到文件,则会收到“找不到文件”。这可能是因为您的文件确实不存在,或者因为该进程缺乏查看文件的权限。

于 2013-10-02T08:18:19.623 回答