2009-11-12 3 views
2

J'ai un programme Scala qui télécharge et analyse html. J'ai obtenu les liens vers les fichiers d'image à partir du html, Maintenant, je dois transférer ces images sur mon disque dur. Je me demande quelle est la meilleure méthode Scala que je devrais utiliser.Scala et html: télécharger une image (* .jpg, etc) sur le disque dur

mon code de connexion:

import java.net._ 
import java.io._ 
import _root_.java.io.Reader 
import org.xml.sax.InputSource 

import scala.xml._ 

def parse(sUrl:String) = { 
    var url = new URL(sUrl) 
    var connect = url.openConnection 

    var sorce:InputSource = new InputSource 
    var neo = new TagSoupFactoryAdapter //load sUrl 
    var input = connect.getInputStream 

    sorce.setByteStream(input) 
    xml = neo.loadXML(sorce) 
    input.close 
} 

My blog

Répondre

3

Ensuite, vous pouvez jeter un oeil à java2s. Bien que la solution est en Java simple mais vous pouvez toujours modifier la syntaxe Scala pour « juste utiliser »

+0

Parfait! Merci. heureusement que j'utilise maven, donc je suis juste en train de le mettre dans un fichier .java pour le moment. – Luigimax

0

Une façon d'y parvenir est: recueillir les URL des images et les demander au serveur (ouvrir une nouvelle connexion avec l'URL de l'image et stocker le bytestream dans le disque dur)

+0

Got cette partie, si vous peut donner un exemple de code id être gratefull – Luigimax

+0

Je n'ai pas le code. Sauvegarder dans un fichier devrait être presque le même que celui que vous avez, mais au lieu de loadXML, vous écrivez dans un fichier. Pour obtenir toutes les images d'URL, sélectionnez toutes les étiquettes d'image et extrayez l'attribut source, puis appelez la méthode de sauvegarde ci-dessus pour chacune d'entre elles. – GClaramunt

2

Une autre option est d'utiliser les commandes du système qui est beaucoup plus propre

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

object Downloader { 
    def start(location: String) : Unit = { 
    val url = new URL(location) 

    var path = url match { 
     case UrlyBurd(protocol, host, port, path) => (if (path == "") "/" else path) 
    } 

    path = path.substring(path.lastIndexOf("/") + 1) 

    url #> new File(path) !! 
    } 
} 

object UrlyBurd { 
    def unapply(in: java.net.URL) = Some((
    in.getProtocol, 
    in.getHost, 
    in.getPort, 
    in.getPath 
)) 
} 
Questions connexes