2014-06-11 30 views
10

Fondamentalmente ho un url/link a un file di testo online e sto provando a scaricarlo localmente. Per qualche motivo, il file di testo che viene creato/scaricato è vuoto. Aperto a qualsiasi suggerimento. Grazie!Come scaricare e salvare un file da internet usando 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) 
    } 

risposta

4

Lavare il buffer e chiudere il flusso di output.

8

Ecco un'implementazione ingenuo da scala.io.Source.fromURL e 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" 
    } 
} 

Il codice funziona per me ... Ci sono altre possibilità che rendono file vuoto.

+1

Provato un altro collegamento e funziona, sospiro, qualcosa di sbagliato con l'URL che sto cercando. Grazie! – slizorn

+3

Ma cosa succede se il file è in un formato binario, quindi suppongo che 'src.mkString' potrebbe non riuscire ... –

19

So che questa è una vecchia questione, ma ho appena imbattuto in un modo davvero piacevole di fare questo:

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

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

Spero che questo aiuti. Source.

Ora è possibile utilizzare semplicemente la funzione fileDownloader per scaricare i file.

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

cosa succede se voglio usare lo stesso codice sopra e invece di scaricarlo e archiviarlo localmente voglio memorizzarlo in un altro server che mi conosce IP – Aamir

+2

Grazie per aver aggiunto le importazioni! –

+0

@Aamir dipende da come l'altro server gestisce il caricamento. In tal caso, il metodo sopra menzionato non funzionerà. –

Problemi correlati