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 :

Problème de noms lors du découpage d'un fichier texte


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut Problème de noms lors du découpage d'un fichier texte
    Salut à tous,

    Je sollicite de nouveau votre aide. Le programme qui suit fonctionnement parfaitement mis à part que le nom des fichiers qu'il génère est de la forme
    Ce que je voudrais c'est un truc du genre essai_1.txt, essai_2.txt, essai_3.txt, etc. J'arrive pas à trouver mon erreur vu que j'utilise un compteur(cpt) que j'incrémente de 1 à chaque itération de while...
    voilà le programme. Merci d'avance.
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    /**
    * FileSplitter.java by HackTrack
    */
    public class FileSplitter {
    	private static File destDir;
     
    	public static File[] splitFile(String filePath, long maxSize, String toDir)
    			throws IOException {
    		handleToDir(toDir);
    		int cpt;
    		cpt=1;
    		File[] splittedFiles;
    		List<File> files = new ArrayList<File>();
    		BufferedReader reader = new BufferedReader(new FileReader(filePath));
    		String fileName = new File(filePath).getName();
    		StringBuffer fileContent = new StringBuffer();
    		String line;
    		File currentFile = FileSplitter.createSplittedFile(fileName,(int) cpt);
    		while ((line = reader.readLine()) != null) {
    			cpt=cpt+1;
    			fileContent.append(line);
    			fileContent.append("\r\n");
    			if (fileContent.length() >= maxSize) {
    				FileSplitter.writeFile(currentFile, fileContent.toString());
    				files.add(currentFile);
    				fileContent = new StringBuffer();
    				currentFile = FileSplitter.createSplittedFile(fileName,(int) cpt);
    			}
    		}
    		FileSplitter.writeFile(currentFile, fileContent.toString());
    		files.add(currentFile);
     
    		splittedFiles = new File[files.size()];
    		int c=0;
    		for (File file : files) {
    			splittedFiles[c] = files.get(c);
    			c++;
    		}
    		return splittedFiles;
    	}
     
    	private static void handleToDir(String toDir) {
    		destDir = new File(toDir);
    		if (destDir.exists())
    			destDir.delete();
    		destDir.mkdir();
    	}
     
    	private static File createSplittedFile(String fileName, int index)
    			throws IOException {
    				return File.createTempFile(new File(fileName).getName().substring(0, new File(fileName).getName().indexOf(".")) + "_" + String.valueOf(index),".txt", destDir);
    	}
     
    	private static void writeFile(File destFile, String content)
    			throws IOException {
    		BufferedWriter writer = new BufferedWriter(new FileWriter(destFile));
    		writer.write(content);
    		writer.flush();
    		writer.close();
    		writer = null;
    	}
     
    	public static void main(String[] args) {
    		try {
    			// 1048576 = 1Mo
    			System.out.println(FileSplitter.splitFile("c:/essai.txt", 131072,"c:/testSplit").length+ " files generated");
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }

  2. #2
    Membre averti
    Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Par défaut
    while ((line = reader.readLine()) != null) {
    cpt=cpt+1;

    en regardant rapido pour moi tu incrémente ton compteur trop tôt

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut
    Merci pour ta réponse, ça m'a aidé mais c'était pas le problème.
    En fait c'est au niveau de l'utilisation de la méthode "File.CreateTempFile"
    La méthode ajoute automatiquement ces nombres dans le nom du fichier. Donc au lieu d'utiliser cette méthode j'ai utiliser simplement File F=new File (chemin);

  4. #4
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Citation Envoyé par fasfousba Voir le message
    Merci pour ta réponse, ça m'a aidé mais c'était pas le problème.
    En fait c'est au niveau de l'utilisation de la méthode "File.CreateTempFile"
    La méthode ajoute automatiquement ces nombres dans le nom du fichier. Donc au lieu d'utiliser cette méthode j'ai utiliser simplement File F=new File (chemin);
    C'est normal.

    Comme son nom l'indique CreateTempFile créer un fichier temporaire, avec un nom aléatoire suffisamment complexe pour ne pas écraser un existant, mais ce fichier n'est pas sensé être conservé (ce n'est pas vraiment l'esprit d'un fichier temporaire).

    Typiquement tu prends un fichier initiale, tu fais un certains nombres de manipulations qui utilisent des fichiers temporaires, et à la fin tu réinjecte tes résultats dans le fichier initial et supprime les fichiers temporaires.

    Ça évite d'avoir à créer des fichiers temporaires avec des vrais noms, ce qui n'est pas forcement pratique si on ne sait pas combien de fois successives on passera par l'étape "créer un fichier temporaire".

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

Discussions similaires

  1. [Batch] Problème avec caractère ! lors d'une lecture de fichier pour extraction
    Par damsmut dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 20/11/2012, 16h21
  2. Problème de nom lors d'une copie
    Par bakman dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/12/2010, 18h02
  3. Problème lors du découpage d'un fichier CVS
    Par lahjouji.hassan dans le forum Linux
    Réponses: 10
    Dernier message: 29/11/2010, 15h05
  4. [10.2][UNIX] Problème de groupe lors de la création de fichiers
    Par Escandil dans le forum Administration
    Réponses: 4
    Dernier message: 02/10/2009, 13h22
  5. Réponses: 14
    Dernier message: 19/09/2007, 13h39

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