Wie zum download und speichern Sie eine Datei aus dem internet mit Scala?
Grundsätzlich habe ich eine url/link zu einer text-Datei online und ich bin versucht, es herunterzuladen lokal. Für einige Grund, die text-Datei wird erstellt/heruntergeladen leer ist. Offen für alle Vorschläge. Danke!
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)
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Flush den Puffer und schließen Sie dann den Ausgabe-stream.
Ich weiß, das ist eine alte Frage, aber ich kam gerade über einen wirklich schönen Weg, dies zu tun :
Hoffe, das hilft. Quelle.
Können Sie jetzt einfach benutzen fileDownloader-Funktion, um die Dateien herunterzuladen.
scala.util.Try
.Hier ist eine naive Implementierung von
scala.io.Source.fromURL
undjava.io.FileWriter
Dein code funktioniert bei mir... Es gibt andere Möglichkeiten, die machen leere Datei.
src.mkString
könnte scheitern,...Hier ist eine sicherere alternative zu
new URL(url) #> new File(filename) !!
:Zwei Dinge:
URL
Objekt, wenn ein Fehler (404
zum Beispiel) zurückgegeben wird, dann wird dieURL
Objekt werfen wirdFileNotFoundException
. Und da diese Ausnahme wird erzeugt, aus einem anderen thread (alsURL
passiert in einem separaten thread ausgeführt), eine einfacheTry
odertry/catch
nicht in der Lage sein, um die Ausnahme zu fangen. So ist die vorab-check für den response-code:if (connection.getResponseCode >= 400)
.connection.setReadTimeout(5000)
.