2014-06-11 23 views
10

Zasadniczo mam URL/link do pliku tekstowego online i próbuję go pobrać lokalnie. Z jakiegoś powodu plik tekstowy, który zostanie utworzony/pobrany, jest pusty. Otwórz na wszelkie sugestie. Dzięki!Jak pobrać i zapisać plik z Internetu za pomocą Scala?

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) 
    } 

Odpowiedz

4

Opróżnij bufor, a następnie zamknij strumień wyjściowy.

8

Oto naiwna implementacja przez scala.io.Source.fromURL i 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" 
    } 
} 

Twój kod działa dla mnie ... Są też inne możliwości, które sprawiają, pusty plik.

+1

Wypróbowałem inny link i działa, westchnienie, coś nie tak z adresu URL, który próbuję. dzięki! – slizorn

+3

Ale co, jeśli plik jest w formacie binarnym, to domyślam się, że 'src.mkString' może się nie powieść ... –

19

wiem, jest to stara sprawa, ale ja po prostu natknął się naprawdę miły sposób to zrobić:

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

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

nadzieję, że to pomaga. Source.

Możesz teraz po prostu użyć funkcji fileDownloader, aby pobrać pliki.

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

co jeśli chcę użyć tego samego kodu powyżej i zamiast pobierać i przechowywać go lokalnie chcę go zapisać w inny serwer, którego adres IP jest mi znany – Aamir

+2

Dziękujemy za dodanie importu! –

+0

@Aamir zależy od tego, jak serwer obsługuje przesyłanie. W takim przypadku powyższa metoda nie będzie działać. –

Powiązane problemy