IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Copie fichier depuis serveur distant + lecture mot à mot


Sujet :

API standards et tierces Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut Copie fichier depuis serveur distant + lecture mot à mot
    Bonjour,

    J'ai deux probblèmes ... peut etre pourrez vous m'aider ?!?

    1°) Je ne sais pas copier un fichier existant sur un serveur distant pour le mettre sur ma tablette.
    Par contre je sais coment faire pour savoir si ce fichier existe en utilisant HttpGet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    						Url  = "http://192.168.0.115/svn/trunk/liste_appel_tablette/Fichiers_appel/toto.txt";
    						// --- Envoie de la commande http
    						httpclient = new DefaultHttpClient();
    						httpget = new HttpGet(Url);
     
    						HttpResponse response = null;
    						try {
    							response = httpclient.execute(httpget);
    						} catch (ClientProtocolException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						} catch (IOException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						}
     
    						entity = response.getEntity();
    						responseString = null;
     
    						if (entity != null)
    							try {
    								responseString = EntityUtils.toString(entity);
    							} catch (ParseException e) {
    								// TODO Auto-generated catch block
    								e.printStackTrace();
    							} catch (IOException e) {
    								// TODO Auto-generated catch block
    								e.printStackTrace();
    							}
     
    						if (responseString.contains("404")) //erreur "404" -> page non trouvée  
    						{  	// pas de fichier	
    						}
    						else
    						{  	// fichier existant -> action
    						}
    						httpclient.getConnectionManager().shutdown();


    2°) je sais lire un fichier ligne à ligne, mais j'aurai besoin de le lire mot à mot
    -> soit pour faire un affichage sur une vue directement
    -> soit pour mettre en bdd locale au périphérique

    mon code pour la lecture ligne a ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public String getHttpGet(String url) {
     
     
    		try {
    			stringBuffer = new StringBuffer("");
    			uri = new URI(url);
    			httpGet.setURI(uri);
    			httpResponse = httpClient.execute(httpGet);
    			inputStream = httpResponse.getEntity().getContent();
    			bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    			String readLine = bufferedReader.readLine();
    			while (readLine != null) {
    				stringBuffer.append(readLine);
    				stringBuffer.append("\n");
    				readLine = bufferedReader.readLine();
    			}
    		} 
    		catch (Exception e) {
    			Log.e(LOG_TAG, e.getMessage());	
    		} 
    		finally {
    			if (bufferedReader != null) {
    				try {
    					bufferedReader.close();
    				} catch (IOException e) {
    					Log.e(LOG_TAG, e.getMessage());
    				}
    			}
    		}
    		return stringBuffer.toString();
    	}

    Merci par avance !!
    Frhu

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Pour le téléchargement en local de ton fichier :
    http://android.developpez.com/faq/?p...sdk_dl_file_id

    Pour la lecture mot à mot, là c'est bizarre car dans ton exemple tu fait de la lecture du fichier distant et non local... mais bon ta lecture fonctionne et ce qu'il te reste à faire c'est découpé selon les espaces des mots avec la méthode "split" par exemple de la classe String.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Oui c'est marrant y a déjà tout le code (en deux versions différentes) pour lire le fichier à distance....

    Par contre il y a trop d'exceptions catchée (ou mal catchées je sais pas) dans la fonction a base de HttpGet/HttpEntity....
    Si le compilateur râle parceque l'exception Toto est pas catchée, 9 x sur 10 il faut déclarer la fonction comme envoyant cette exception (et faire le traitement de l'exception au dessus).
    La dans le code, en cas d'exception dans le response = client.execute(...); response va être null, et bim NullPointerException dans le entity = response.getEntity(); .... On ne veut pas continuer l'execution du code, donc on ne catch pas l'exception...

    responseString.contains("404") est faux....
    Pour savoir si il y a eu une erreur il suffit de faire:
    if (response.getStatusLine().getStatusCode() < 400) {
    // success
    } else {
    // failure
    }
    (il n'y a pas que les 404 hein !)

    Sinon, une fois que tu as fais:
    responseString = EntityUtils.toString(entity);
    Tu as déjà le contenu du fichier sous forme de "string"....

    Pour séparer "mot à mot", il faut utiliser un truc genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    int startIdx = 0;
    boolean inSep = true;
    for (int idx = 0; (idx < responseString.length()); ++idx) {
        if (Character.isLetterOrDigit(responseString.charAt(idx)) {
            if (inSep) {
                // start of word
                inSep = false;
                startIdx = idx;
            }
        } else if (!inSep) {
           // end of word
           consumeWord(responseString.substring(startIdx,idx));
           inSep = true;
        }
    }
    if (!inSep)
        consumeWord(responseString.substring(startIdx));

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Bonjour

    Merci pour vos réponses !!!


    Les 2 bouts de programmes que j'ai donnés sont issus de 2 petits programmes que j'ai en tests... et qui vont me servir pour développer celui que je dois réaliser : c'était pour montrer ce que je savais faire.... et pour savoir ce qu'il me restait à faire !!!

    @MrDuChnok :
    - Merci pour la copie de fichier... je chercherai mieux sur le site avant de demander !!!
    - Le split est exactement ce que je voulais !! Etant donné que c'est moi qui gère la génération de fichier au niveau du serveur, je sépare mes mots ou expressions avec un '.' et pour tester j'ai fais un toast

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //textString est le résultat de la lecture du fichier au format String
    String[] expression = textString.split("\\.");
     
    	    			text.setText("Nom de l'appelant -> " + expression[0] +
    	    						 "\nType appel 			-> " + expression[1] +
    	    						 "\nLieu appel 			-> " + expression[2] +
    	    						 "\nDate Appel 			-> " + expression[3]");
    @nicroman :

    - Merci pour la gestion des erreurs !! ('<400')
    - Je sais que je dois mieux gérer les exceptions, mais le temps m'est compté... je ne sais pas si c'est un bon calcul de faire comme ca, mais pour l'instant je ne peux pas m'y plonger (a moins que ce ne sois pas long a faire)
    - Je vais quand même essayer de mettre en place ta découpe mot à mot..

    Merci a vous deux. Je passe le post en résolu car vous avez répondu a ma demande !!
    Cordialement.
    FRHU

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par frhu13 Voir le message
    - Je sais que je dois mieux gérer les exceptions, mais le temps m'est compté... je ne sais pas si c'est un bon calcul de faire comme ca, mais pour l'instant je ne peux pas m'y plonger (a moins que ce ne sois pas long a faire)
    Surtout si le temps est compté, il vaut mieux le faire dès le début, sinon c'est une galère sans nom (surtout pour trouver pourquoi on a un "Application Closed" alors qu'il n'y a aucun log [utilisation de ex.printStackTrace() au lieu de Log.e(tag,message,ex);])

    Un truc qui est facile pour les excpeptions (et qui marche dans 95% des cas): ne pas les gérer dans les fonctions "business" (logique)...
    Eclipse propose deux choix en cas d'exception non catchée: la déclarée comme envoyée par la fonction (throws XXXXX) ou la catcher... Toujours utiliser la première solution, *sauf* dans la fonction "UI" (onXXXXX) ou dans le run() d'un runnable.... et voila...

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Je vais me pencher dessus alors !
    merci pour les conseils !!

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    re-bonjour,

    je me suis enfin penché sur les exceptions....
    Et vous savez quoi ???? ca fonctionne beaucoup mieux comme ca !!
    Bon, peut etre n'ai je pas bien fait, mais cela marche...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
                                       try {response = httpclient.execute(httpget);
    						} catch (ClientProtocolException e) {
    							e.printStackTrace();
    							response = null;
    						} catch (IOException e) {
    							e.printStackTrace();
    							response = null;
    								}finally{
    									if (response != null)
    									{
    										if (response.getStatusLine().getStatusCode() > 400)  
    												{  	//code : pas de fichier
    												}
    												else
    												{ 	//code : fichier existant
    												}
    									}
    									else
    									{//code : pas de fichier
    									}
    								}
    Merci nicroman pour m'avoir guidé !!

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    En bref... le finally ne sert à rien (cf ton code), et il y a une règle: JAMAIS de code dans un FINALLY

    Le FINALLY ne sert qu'à fermer les ressources ouvertes avant le try...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    try {
        response = httpclient.execute(httpget);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
        response = null;
    } catch (IOException e) {
       e.printStackTrace();
       response = null;
    }finally{
        if (response != null) {
            // ON NE PASSE ICI QUE DANS LE CAS OU IL N'Y A PAS EU D'EXCEPTION
            // POURQUOI DANS UN FINALLY ?
            if (response.getStatusLine().getStatusCode() > 400) {  	
                //code : pas de fichier
            } else { 	
               //code : fichier existant
            }
       } else {
          //code : pas de fichier
       }
    }
    Code correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    try {
        response = httpclient.execute(httpget);
        if (response.getStatusLine().getStatusCode() > 400) {  	
                //code : pas de fichier
        } else { 	
               // code : fichier existant
        }
    } catch (Exception ex) {
       // On n'utilise jamais ex.printStackTrace() !
       Log.w("MONAPP","Erreur de récupération de fichier",ex);
       // code: pas de fichier
    }
    Ou encore mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
        response = httpclient.execute(httpget);
        if (response.getStatusLine().getStatusCode() > 400)
           throw new IOException("Http response "+response.getStatusLine());
        // code : fichier existant
    } catch (Exception ex) {
       Log.w("MONAPP","Erreur de récupération de fichier",ex);
       // code: pas de fichier
    }

  9. #9
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    ok, compris ... et mis en fonction !!

    sinon, j'ai toujours mon probleme au demarrage de la tablette ...

    Merci pour le boulot que vous faites (toi et les autres) !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerShell] Copie de fichier sur serveur distant
    Par talkk dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 08/12/2014, 09h16
  2. Réponses: 2
    Dernier message: 28/09/2011, 12h26
  3. SQL*LOADER + chargement de fichiers depuis serveur distant
    Par floflo164 dans le forum SQL*Loader
    Réponses: 4
    Dernier message: 17/01/2011, 16h27
  4. Réponses: 1
    Dernier message: 30/10/2008, 17h42
  5. existence d'un fichier sur serveur distant
    Par Fabouney dans le forum Programmation et administration système
    Réponses: 3
    Dernier message: 17/01/2006, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo