我要在scala中复制文件但是得到FileNotFound错误,assets文件夹在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 )
答案 0 :(得分:2)
在您的代码中,您尝试使用FileOutputStream复制文件,这需要现有文件的有效路径,否则它将抛出FileNotFoundException
。 (参见文档here)
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还有自己的实用程序来复制文件。这是link。
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
答案 1 :(得分:0)
在Java上复制文件时,请使用Apache commons项目中的FileUtils.copy(...)
。
如果正在运行的进程找不到该文件,则会出现“找不到文件”。这可能是因为您的文件确实不存在,或者因为该进程缺少查看文件的权限。
答案 2 :(得分:0)
您的措辞有点含糊不清,似乎您打算提供相对于当前工作目录的路径。这意味着应该从包含assets
目录的目录执行此代码。如果是这样,那么你犯了一个错误并给出了文件对象的绝对路径,而不是相对的路径。您所要做的就是从这些路径中删除初始正斜杠,它应该可以工作。
实际上,您告诉Scala / Java查看assets
的根目录。