21

具体的には、ファイル アップロードを Lift Web アプリのローカル ファイルに保存しています。

4

4 に答える 4

40

Java 7 以降Files では、新しい File I/O から使用できます。

Files.copy(from, to)

fromandはs またはs ですto。このようにして、それを使用して、jar にパックされたアプリケーションからリソースを簡単に抽出することもできます。PathInputStream

于 2013-02-21T15:39:31.450 に答える
20

それがテキスト ファイルで、Scala と Java に限定したい場合は、 を使用scala.io.Sourceして読み取りを行うのがおそらく最速です。組み込みではありませんが、簡単に記述できます。

def inputToFile(is: java.io.InputStream, f: java.io.File) {
  val in = scala.io.Source.fromInputStream(is)
  val out = new java.io.PrintWriter(f)
  try { in.getLines().foreach(out.println(_)) }
  finally { out.close }
}

しかし、とにかく他のライブラリが必要な場合は、それらを使用することで生活をさらに楽にすることができます (Michel が示しているように)。

(PS--Scala 2.7 では、後にgetLinesa を付けるべきではありません()。)

(PPS -- 古いバージョンの Scala ではgetLines、改行を削除しなかったため、print代わりに. を削除する必要がありますprintln。)

于 2010-05-06T17:50:27.260 に答える
9

Scala 固有の API については知りませんが、Scala は Java と完全に互換性があるため、Apache Commons IOApache Commons FileUploadなどの他のライブラリを使用できます。

以下はコード例です (未テスト):

//using Commons IO:
val is = ... //input stream you want to write to a file
val os = new FileOutputStream("out.txt")
org.apache.commons.io.IOUtils.copy(is, os)
os.close()

//using Commons FileUpload
import javax.servlet.http.HttpServletRequest
import org.apache.commons.fileupload.{FileItemFactory, FileItem}
import apache.commons.fileupload.disk.DiskFileItemFactory
import org.apache.commons.fileupload.servlet.ServletFileUpload
val request: HttpServletRequest = ... //your HTTP request
val factory: FileItemFactory = new DiskFileItemFactory()
val upload = new ServletFileUpload(factory)
val items = upload.parseRequest(request).asInstanceOf[java.util.List[FileItem]]
for (item <- items) item.write(new File(item.getName))
于 2010-05-06T17:13:32.790 に答える
4

上記の inputToFile メソッドは、.pdf ファイルなどのバイナリ ファイルではうまく機能しません。ファイルを文字列にデコードしようとすると、実行時例外がスローされます。私のために働いたのはこれでした:

def inputStreamToFile(inputStream: java.io.InputStream, file: java.io.File) = {
    val fos = new java.io.FileOutputStream(file)
    fos.write(
      Stream.continually(inputStream.read).takeWhile(-1 !=).map(_.toByte).toArray
    )
    fos.close()
}
于 2014-10-08T12:34:18.280 に答える