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

Entrée/Sortie Java Discussion :

[dézipper]Trouver si un fichier a 1 accent dans un zip


Sujet :

Entrée/Sortie Java

  1. #1
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut [dézipper]Trouver si un fichier a 1 accent dans un zip
    Bonjour

    J'aimerai savoir comment détecter la présence de fichiers avec des accents dans un fichier Zip.

    Plus précisément, j'utilise un framework basé sur org.apache.commons.fileupload pour uploader. Une fois ce fichier uploader, je le dézippe. Or, il plante quand un des fichiers composant le zip a des accents (ou caractères spéciaux) dans son nom.

    Connaissez vous un moyen simple de savoir cela avant de lancer le dézippage ?

    J'espère avoir été clair, si ce n'est pas le cas n'hésitez pas à me poser des questions !

    Merci d'avance

    ZedroS

    EDIT : pour info, j'ai un FileItem pendant mon upload...
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  2. #2
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Comment fais-tu pour dézipper ?
    En java, tu as ZipInputStream qui te permet de lire un zip sans pour autant l'enregistrer sur le disque.

  3. #3
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Je comprend pas trop ton problème ? il sagit du nom du fichier qui contient un accent. Donc dans ce cas un petit tonFichier.getName()

    et sur cette string, tu retires les accents comme suit : http://www.developpez.net/forums/vie...hlight=accents

    Edit : je viens de comprendre en faite, sorry
    Etre c'est etre relatif.

  4. #4
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    Disons que je dois utiliser un gros framework, en voici le fonctionnement pour ce qui nous intéresse.

    L'upload se fait dans un répertoire. Ce répertoire est scanné régulièrement par un service qui, après moultes passages dans des classes (implémentant des interfaces), utilise en effet ZipInputStream tout en bas à la fin...

    Aussi, je regarde plus avant ton idée, car je pense y avoir trouvé une piste de solution

    Merci à toi

    ZedroS, newbe powa
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  5. #5
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    En gros, ça va donner ça je pense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Upload
    java.io.InputStream zipInputStream = item.getInputStream() ;
     
    // Vérif absence caractères spéciaux
    boolean noSpecialCar = true ;
     
    ZipInputStream zipStream = new ZipInputStream(zipInputStream) ;
    for( ZipEntry entry = zipStream.getNextEntry(); entry!= null && noSpecialCar ; entry = zipStream.getNextEntry() ) {
    	/* checker l'absence d'accent, mettre noSpecialCar à false si besoin*/
    }
     
    // Par la suite, tester noSpecialCar pour déterminer la suite du traitement
    Faut encore que je trouve comment vérifier l'absence de caractères spéciaux mais je pense que le lien de yolepro devrait m'aider.

    Si vous avez d'autres pistes/suggestions/commentaires je suis preneur
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  6. #6
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    une autre bonne solution je pense c'est regex qui peut faire de la magie... après je n'ai pas cherché plus avant et les expressions régulières sont pour moi un langage venu d'une autre planete
    Etre c'est etre relatif.

  7. #7
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    Bon, ce problème est partiellement résolu. En effet, la regex [a-zA-Z0-9._]+ satisfait le tout mais le hic est que... les packages java.util.regex.* datent de la 1.4 alors qu'il me faut du 1.3...

    J'vais devoir chercher encore moué...

    Des idées pour faire du regex en 1.3 ?

    EDIT : il me faut des chaines qu'avec des lettres sans accents (min ou maj), des chiffres, des . et des _. D'où ma regex.
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  8. #8
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    Encore moué.

    Comment savoir avec quelle version de Java tourne une libraire ? Par exemple, au pif : http://jakarta.apache.org/regexp/index.html ?

    Merci d'avance !
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  9. #9
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    J'me fais mon topic tout seul... lol

    En fait, regexp ne me convient pas car son fonctionnement n'est pas le bon : si au moins un caractère répond à l'expression régulière donnée alors le retour est bon... erf



    Par conséquent, je pense faire ça à la main, cad en programmant tout le traitement moi même.

    J'aimerai mettre dans un "tableau" les bons caractères puis, pour chaque nom de fichier présent dans mon zip, prendre chacun de ses caractères et le comparer. Si un d'entre eux n'est pas présent dans mon tableau, je le rejette. Auriez vous une idée sur la bonne structure (tableau, collection???) à prendre pour vérifier aisément si le caractère courant s'y trouve ?

    Merci d'avance
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  10. #10
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    Bon, finalement, ça donne ça :
    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
    public class TestManuelMain {
     
    	static private Set set = new HashSet();
     
    	static private int numberOfElements = 0;
     
    	public static boolean withoutSpecialCar(String chaine) {
    		if (set.isEmpty()){
    			set.add("a");
    			set.add(".");
    			set.add("_");
    			numberOfElements = set.size() ;
    		}
    		chaine = chaine.toLowerCase() ;
     
    		boolean retour = true ;
    		chaine = chaine.toLowerCase() ;
    		for (int i = 0; i < chaine.length() && retour != false ; i++) {
    			retour = true ;
    			if ( !set.contains(String.valueOf( chaine.charAt(i ))) ) retour = false;
    		}
    		return retour ;
    	}
     
    	public static void main(String[] args) {
     
    		System.out.println("Attendu : true, obtenu :" + withoutSpecialCar("a._"));
    		System.out.println("Attendu : false, obtenu :" + withoutSpecialCar("a.é_"));
    		System.out.println("Attendu : true, obtenu :" + withoutSpecialCar("a.A_"));
    	}
    J'espère que c'est pas trop mal...
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  11. #11
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    C'est un peu compliqué !
    Dans la classe String, tu as la méthode indexOf(char) et indexOf(String)
    Il me semblerait plus performant (??) d'avoir une classe genre :

    public class CarateresSpeciauxHelper {

    private static final String s_nonVoulus = "âàéèêöô";

    public static boolean existNonVoulu(String chaine) {
    for (int i=0;i<s_nonVoulus.length();i++)
    if (-1 <> chaine.indexOf(s_nonVoulus.charAt(i)))
    return true;
    return false;
    }

    public static boolean existNonVoulu(String chaine,String carNonVoulus) {
    for (int i=0;i<carNonVoulus.length();i++)
    if (-1 <> chaine.indexOf(carNonVoulus.charAt(i)))
    return true;
    return false;
    }


    }

  12. #12
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    En fait je connais juste "bien" les caractères que je veux, cad de a à z (casse indifférente), de 0 à 9 ainsi que "_" et "." .

    Du coup si je prends toutes les possibilités de la table ASCII comme carNonVoulu la liste va être sacrément longue...

    EDIT : le gros du problème a été résolu je passe donc le tag résolu.
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/04/2014, 14h17
  2. Problème d'accents dans un zip
    Par xdescamp dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/06/2010, 16h55
  3. [ZiP] Nom d'entrée avec un accent dans un ZIP
    Par *.Har(d)t dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/12/2008, 14h28
  4. Réponses: 7
    Dernier message: 27/09/2005, 11h54
  5. Fichiers texte sans accents
    Par mika dans le forum Langage
    Réponses: 5
    Dernier message: 03/11/2004, 16h42

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