Как загрузить и сохранить файл из Интернета с помощью Scala?

В основном у меня есть url/ссылка на текстовый файл онлайн, и я пытаюсь загрузить его локально. По какой-то причине текстовый файл, который создается/загружен, пуст. Открыта для любых предложений. Спасибо!

    def downloadFile(token: String, fileToDownload: String) {

    val url = new URL("http://randomwebsite.com/docs?t=" + token + "&p=tsr%2F" + fileToDownload)
    val connection = url.openConnection().asInstanceOf[HttpURLConnection]
    connection.setRequestMethod("GET")
    val in: InputStream = connection.getInputStream
    val fileToDownloadAs = new java.io.File("src/test/resources/testingUpload1.txt")
    val out: OutputStream = new BufferedOutputStream(new FileOutputStream(fileToDownloadAs))
    val byteArray = Stream.continually(in.read).takeWhile(-1 !=).map(_.toByte).toArray
    out.write(byteArray)
    }

Ответ 1

Сбросьте буфер и закройте выходной поток.

Ответ 2

Я знаю, что это старый вопрос, но я просто натолкнулся на действительно хороший способ сделать это:

import sys.process._
import java.net.URL
import java.io.File

def fileDownloader(url: String, filename: String) = {
    new URL(url) #> new File(filename) !!
}

Надеюсь, это поможет. Источник.

Теперь вы можете просто использовать функцию fileDownloader для загрузки файлов.

fileDownloader("http://ir.dcs.gla.ac.uk/resources/linguistic_utils/stop_words", "stop-words-en.txt")

Ответ 3

Вот наивная реализация scala.io.Source.fromURL и java.io.FileWriter

def downloadFile(token: String, fileToDownload: String) {
  try {
    val src = scala.io.Source.fromURL("http://randomwebsite.com/docs?t=" + token + "&p=tsr%2F" + fileToDownload)
    val out = new java.io.FileWriter("src/test/resources/testingUpload1.txt")
    out.write(src.mkString)
    out.close
  } catch {
    case e: java.io.IOException => "error occured"
  }
}

Ваш код работает для меня... Существуют и другие возможности, которые делают пустой файл.