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

一般的なアドバイス

Java でファイルをコピーする場合はFileUtils.copy(...)、Apache commons プロジェクトの を使用します。

あなたの特定の問題のために

実行中のプロセスでファイルが見つからない場合は、「ファイルが見つかりません」と表示されます。これは、ファイルが実際にそこにないか、プロセスにファイルを表示する権限がないことが原因である可能性があります。

于 2013-10-02T08:18:19.623 に答える
0

あなたの言い回しは少しあいまいです。現在の作業ディレクトリに相対的なパスを指定するつもりだったようです。つまり、このコードは、ディレクトリを含むディレクトリから実行する必要がありますassets。もしそうなら、あなたは間違いを犯し、相対パスではなくファイルオブジェクトへの絶対パスを与えています。これらのパスから最初のスラッシュを削除するだけで機能します。

そのままでは、Scala/Java にルート ディレクトリで を探すように指示していますassets

于 2013-10-02T09:48:57.717 に答える