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

Java Discussion :

Supprimer 1 à 3 premieres ligne d'un fichier / Refactoring


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Par défaut Supprimer 1 à 3 premieres ligne d'un fichier / Refactoring
    Bonjour à tous,

    j'ai une méthode permettant de nettoyage les 3 premières lignes d'un fichier, mais je pense qu'il y a sûrement un moyen de refactorer cette méthode afin qu'elle soit moins lourde et plus simple à comprendre. Elle fait le boulot, ça fonctionne, mais bof pour le code quoi... N'ayant pas une grande expertise Java, j'aurais besoin d'aide.

    Le fichier en entrée peut avoir :
    - les 3 premières lignes vide (la 4ème comporte la bonne ligne d'entête) ou les 2 premières ou la 1ère.
    Mais, il peut aussi avoir, la 1ère ligne non vide ou contenant des ";" ou "Titre du rapport" (la 2ème ligne comporte la bonne ligne d'entête) ou la deuxième ligne ou la troisième ligne. Il faudrait que je trouve un moyen de supprimer les mauvaises lignes avant la bonne ligne contenant les entêtes.
    Merci pour vos retours.
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    public void nettoyageEntetes(param1 param1, FileService fileService, properties properties) throws ReportPtgFileException {
            int numberOfLinesToDelete = 0;
            File file = Paths.get(
                param1.getStep().getFlow().getParameterPath().getWorkingDirectory(),
                param1.getStep().getFlow().getTriggerFilename()
            ).toFile();
     
            try (BufferedReader bufferedReader = Files.newBufferedReader(file.toPath(), Charset.forName(Constants.PRH_DEFAULT_ENCODING))) {
                String firstLine = bufferedReader.readLine();
                String secondLine = bufferedReader.readLine();
                String thirdLine = null;
     
                if (!StringUtils.isEmpty(secondLine))
                    thirdLine = bufferedReader.readLine();
                if (StringUtils.isEmpty(thirdLine) && StringUtils.isEmpty(firstLine))
                    numberOfLinesToDelete = 3;
                else if (StringUtils.isEmpty(firstLine))
                    numberOfLinesToDelete = 1;
                else if (!StringUtils.isEmpty(firstLine) && firstLine.contains("Titre"))
                    numberOfLinesToDelete = 1;
                else if (!StringUtils.isEmpty(firstLine) && secondLine.contains("Titre"))
                    numberOfLinesToDelete = 2;
                else if (!StringUtils.isEmpty(firstLine) && secondLine.contains(Constants.SPLIT_FIELD))
                    numberOfLinesToDelete = 1;
            } catch (IOException e) {
                throw ReportPtgFileException.build(Constants.PRH_ERROR_CODE_REJET)
                    .withMessage("Erreur de lecture lors de la vérification pour nettoyage: %s", e.getMessage())
                    .withData(param1.getStep().getFlow().getTriggerFilename());
            }
     
            if (numberOfLinesToDelete != 0) {
                File tmpFile = Paths.get(param1.getStep().getFlow().getParameterPath().getWorkingDirectory(),
                    param1.getStep().getFlow().getTriggerFilename().concat(".temp")).toFile();
                tmpFile.delete();
     
                try (BufferedReader bufferedReader = Files.newBufferedReader(file.toPath(), Charset.forName(Constants.PRH_DEFAULT_ENCODING));
                     BufferedWriter bufferedWriter = Files.newBufferedWriter(tmpFile.toPath(), Charset.forName(Constants.PRH_DEFAULT_ENCODING))) {
     
                    for (int i = 0; i < numberOfLinesToDelete; i++) {
                        bufferedReader.readLine();
                    }
     
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        bufferedWriter.append(line);
                        bufferedWriter.newLine();
                    }
                } catch (IOException e) {
                    throw ReportPtgFileException.build(Constants.PRH_ERROR_CODE_REJET)
                        .withMessage("Erreur de lecture lors du nettoyage : %s", e.getMessage())
                        .withData(param1.getStep().getFlow().getTriggerFilename());
                }
                File old = Paths.get(
                    param1.getStep().getFlow().getParameterPath().getWorkingDirectory(),
                    param1.getStep().getFlow().getTriggerFilename().concat(".old")
                ).toFile();
     
                try {
                    Files.copy(file.toPath(), old.toPath());
                    Files.delete(file.toPath());
                    Files.copy(tmpFile.toPath(), file.toPath());
                } catch (IOException e) {
                    // Utilisation de la fonction copyFile afin de récupérer les droits du répertoire parent (répertoire de Rejets)
                    fileService.copyFile(param1.getStep().getFlow().getParameterPath().getWorkingDirectory(),
                        Paths.get(properties.getRootDirectory(), Constants.PRH_REJETS_DIR).toString(),
                        param1.getStep().getFlow().getTriggerFilename());
                    throw new ServiceException("Méthode nettoyageEntetes - Nombre de lignes d'entête à supprimer > 0 - Erreur dans la copie / delete du fichier", e);
            }
        }

  2. #2
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2020
    Messages : 3
    Par défaut Supprimer 1 à 3 premieres ligne d'un fichier / Refactoring
    Bonjour,

    Peut être un peu tard mais je pense que ce code devrais faire l'affaire :

    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
     
    private void nettoyageEntetes(File fileIn, File fileOut) throws IOException{
    	ArrayList<String> lignes = new ArrayList<String>();
    	FileInputStream stream = new FileInputStream(fileIn));
    	InputStreamReader reader = new InputStreamReader(stream, "UTF-8");
    	BufferedReader buff = new BufferedReader(reader);
     
    	//récupération de toutes les lignes du fichier source
    	string line = "";
    	while((String line = buff.readLine()) != null){
    		lignes.add(line);
    	}
     
    	//écriture des lignes dans le nouveau fichier
    	FileWriter fileToWrite = new FileWriter(fileOut);
     
    	for(int i = 0 ; i < lignes.size() ; i++){
    		if(!lignes.get(i).equals("") && !lignes.get(i).equals(";") && !lignes.get(i).equals("Titre du rapport"){//filtrage des données
    			fileToWrite.write(lignes.get(i);
    		}
    	}
     
    	fileToWrite.close();
     
    	//nettoyage
    	line = null
    	lignes = null;
    	stream = null;
    	reader = null;
    	buff = null;
    	fileToWrite = null;
    }

Discussions similaires

  1. Supprimer premiere ligne d'un fichier CSV
    Par leame dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2015, 12h55
  2. lire premiere ligne d un fichier
    Par lathiolle dans le forum Langage
    Réponses: 3
    Dernier message: 29/08/2006, 15h33
  3. [CSV] Ne lire que la premiere ligne d'un fichier CSV
    Par passie dans le forum Langage
    Réponses: 7
    Dernier message: 05/07/2006, 12h02
  4. comment effacer la premiere ligne dans un fichier
    Par aliosys dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/12/2005, 10h14
  5. Supprimer la premiere ligne d'un fichier
    Par Kahiba dans le forum Langage
    Réponses: 7
    Dernier message: 11/02/2003, 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