Существует ли хороший, безопасный, быстрый способ записать InputStream в Файл в Scala?

А именно, я сохраняю загрузку файла на локальный файл в веб-приложении Лифта.

18
задан pr1001 6 May 2010 в 16:16
поделиться

2 ответа

Если это текстовый файл, и вы хотите ограничиться 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 }
}

Но если вам все равно нужны другие библиотеки, вы можете еще больше облегчить себе жизнь, используя их (как показывает Мишель).

(P.S.-в Scala 2.7, getLines не должен иметь () после него.)

(P.P.S.-в Scala 2.7, getLines не должен иметь () после него.)

(P.P.S.-- в старых версиях Scala, getLines не удалял новую строку, поэтому вам нужно print вместо println.)

.
18
ответ дан 30 November 2019 в 05:56
поделиться

Я не знаю о каком-либо специфическом API для Scala, но поскольку Scala полностью совместима с Java, вы можете использовать любую другую библиотеку, например Apache Commons IO и Apache 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))
8
ответ дан 30 November 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: