Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1896 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Lire une partie d'un fichier texte [résolu]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lire une partie d'un fichier texte [résolu]

n°237474
El_gringo
Posté le 30-10-2002 à 17:36:41  profilanswer
 

ça m'énerve, j'arrive pas à trouver. Je m'y perd avec tous ces flux ds tous les sens !
Voila ce que j'ai besoin de faire :
Lire un fichier à partir d'un offset, sur une longueur donnée, comme fait ici :

Code :
  1. int iPartLength = 30;
  2. int iOffset = 150;
  3. byte[] byData = new byte[iPartLength];
  4. FileInputStream stream   = new FileInputStream (_fMonFIchier);
  5. stream.read (byData, iOffset, iPartLength);


 
Sauf que là je me retrouve avec un tableau de bytes. Comment faire pour obtenir une String ou un tableau de char à partir de ça ? (ou autrement).


Message édité par El_gringo le 31-10-2002 à 18:03:46
mood
Publicité
Posté le 30-10-2002 à 17:36:41  profilanswer
 

n°237487
benou
Posté le 30-10-2002 à 17:49:15  profilanswer
 

new String(tonTableauDeByte);

n°237494
El_gringo
Posté le 30-10-2002 à 17:55:16  profilanswer
 

benou a écrit a écrit :

new String(tonTableauDeByte);




 
et les caractères seront encodés correctement en faisant ça ?

n°237496
benou
Posté le 30-10-2002 à 17:56:52  profilanswer
 

bha oui ... ca utilisera l'encodage par défaut de ton OS.
 
sinon, tu peut utiliser un autre encodage : regarde les constructeurs de la classe String

n°237498
El_gringo
Posté le 30-10-2002 à 17:57:05  profilanswer
 

en faisant ça :

Code :
  1. int iHeaderLength                          = 30;
  2.         byte[] byData                              = new byte[iHeaderLength];
  3.         FileInputStream fileInputStream            = new FileInputStream(_fArcDir);
  4.         fileInputStream.read (byData, _iOrigin, byData.length);
  5.         ByteArrayInputStream byteArrayInputStream  = new ByteArrayInputStream (byData);
  6.         InputStreamReader inputStreamReader        = new InputStreamReader (byteArrayInputStream);
  7.         BufferedReader bf                          = new BufferedReader (inputStreamReader);
  8.         char[] charBuffer    = new char[iHeaderLength];
  9.         int iOffset          = bf.read(charBuffer, _iOrigin, charBuffer.length);


 
Je m'embête pour pas grand chose ?
Et puis je comprend pas, j'ai toujours une IndexOutOfBoundException au moment de la lecture de la partie qui m'interresse depuis le fichier (fileInputStream.read (byData, _iOrigin, byData.length);)

n°237503
BifaceMcLe​OD
The HighGlandeur
Posté le 30-10-2002 à 18:04:34  profilanswer
 

Si tu utilisais des Reader au lieu d'utiliser des InputStream, ça irait sans doute mieux !  :sarcastic:
Un Reader lit un flux de caractères (du texte, donc), alors qu'InputStream lit un flux d'octets (du binaire, donc).

Code :
  1. int            iHeaderLength = 30;
  2. char[]         charBuffer    = new char[iHeaderLength];
  3. BufferedReader reader        = new BufferedReader(new FileReader(_fArcDir));
  4. int            iOffset       = reader.read(charBuffer, _iOrigin, charBuffer.length);


C'est pas plus simple, comme ça ?  :sarcastic:  :D
 
Et puis, au cas où cela t'intéresserait, BufferedReader sait aussi lire des lignes entières (BufferedReader.readLine()).


Message édité par BifaceMcLeOD le 30-10-2002 à 18:06:14
n°237504
benou
Posté le 30-10-2002 à 18:06:39  profilanswer
 

oui !
 

Code :
  1. Reader fileReader = new FileReader(_fArcDir);
  2. BufferedReader stream = new BufferedReader(fileReader );
  3. String taString = stream.readLine();

 
 
ca devrait t'aller ca non ?
 
(j'ai pas vérifier mon caode mais ca doit être ca en gros)


Message édité par benou le 30-10-2002 à 18:07:30
n°237506
benou
Posté le 30-10-2002 à 18:07:07  profilanswer
 

arg !!! méga-grilled !

n°237509
BifaceMcLe​OD
The HighGlandeur
Posté le 30-10-2002 à 18:10:45  profilanswer
 

:D

n°237543
El_gringo
Posté le 30-10-2002 à 19:22:52  profilanswer
 

BifaceMcLeOD a écrit a écrit :

Si tu utilisais des Reader au lieu d'utiliser des InputStream, ça irait sans doute mieux !  :sarcastic:
Un Reader lit un flux de caractères (du texte, donc), alors qu'InputStream lit un flux d'octets (du binaire, donc).

Code :
  1. int            iHeaderLength = 30;
  2. char[]         charBuffer    = new char[iHeaderLength];
  3. BufferedReader reader        = new BufferedReader(new FileReader(_fArcDir));
  4. int            iOffset       = reader.read(charBuffer, _iOrigin, charBuffer.length);


C'est pas plus simple, comme ça ?  :sarcastic:  :D
 
Et puis, au cas où cela t'intéresserait, BufferedReader sait aussi lire des lignes entières (BufferedReader.readLine()).




 
Non, ça ça me va pas justement (ms apparement, ce que j'ai fait c'est pas mieux !).
Moi je voudrais lire les 30 premiers octets de mon fichier, pas tout le fichier (il est énorme !).
La ligne suivante :

Code :
  1. reader.read(charBuffer, _iOrigin, charBuffer.length);

Que me propose Biface, c'est pas du tout ça (g essayé avant !). Cette méthode écrit dans le tableau charBuffer[] les caractères lus depuis le fichier, jusqu'a à la fin de ce fichier ou jusqu'a ce que le nombre de bytes à lire à été lu (ici charBuffer.length). Dans ce fonction, l'offset concerne le tableau de bytes, pas le fichier.
C à dire qu'avec la méthode que Biface me donne, ça va faire ça :
lire les 30 premiers octets du fichier _fArcDir
les stocker dans charBuffer à partir de l'index _iOrigin
 
Moi j'ai besoin de :
lire 30 octets à partir du _iOrigin ième octet du fichier
les stocker dans charBuffer (à partir de l'index 0 bien sûr !)

mood
Publicité
Posté le 30-10-2002 à 19:22:52  profilanswer
 

n°237545
El_gringo
Posté le 30-10-2002 à 19:23:34  profilanswer
 

Donc, non, readline ça ma va pas du tout !

n°237713
El_gringo
Posté le 31-10-2002 à 08:41:15  profilanswer
 

Oula, c'est qu'il a chuté ce topic !

n°237735
persepolis
Posté le 31-10-2002 à 09:48:01  profilanswer
 

Un petit bout de code comme ca ?
 
 
        try{
            FileInputStream inFile = new FileInputStream(new File(nomFichier));
            while ((octet = inFile.read()) != -1 && (!trouve)) {
.....


---------------
Evite les personnes arrogantes et vulgaires, elles sont un tourment pour l'esprit.
n°237738
El_gringo
Posté le 31-10-2002 à 09:51:40  profilanswer
 

persepolis a écrit a écrit :

Un petit bout de code comme ca ?
 
 
        try{
            FileInputStream inFile = new FileInputStream(new File(nomFichier));
            while ((octet = inFile.read()) != -1 && (!trouve)) {
.....




 
...oula, ça veut dire parcourir tout le fichier avant de m'arrêter à l'octet qui m'interresse !? ça risque de prendre pas mal de temps vu la taille de mes fichiers.
J'aurais préféré autre chose qu'une lecture séquentielle !

n°237758
BifaceMcLe​OD
The HighGlandeur
Posté le 31-10-2002 à 10:05:21  profilanswer
 

Essaie d'utiliser Reader.skip(n).

n°237817
El_gringo
Posté le 31-10-2002 à 11:13:02  profilanswer
 

Bon, finalement j'ai trouvé, avec RandomAccessFile.
Desfois que ça interresserai qqn :

Code :
  1. int iTockenSize                          = 30;
  2.         byte[] byData                            = new byte[iTockenSize];
  3.         RandomAccessFile randomAccessFile        = new RandomAccessFile(_fArcDir, "r" );
  4.         randomAccessFile.seek(_iOrigin);
  5.         randomAccessFile.read(byData);
  6.         String strToks         = new String (byData);

n°239135
BifaceMcLe​OD
The HighGlandeur
Posté le 04-11-2002 à 11:38:36  profilanswer
 

:jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Lire une partie d'un fichier texte [résolu]

 

Sujets relatifs
problème d'ouverture de fichier [résolu][PHP] Extraire les deux premiers caractères d'une chaîne - RESOLU
compresser un fichier sur le serveurServlet-utiliser les plugins de l'explorateur pr lire des pdf, doc,...
[C/C++] Copier un char* dans un char*? pas resolu-C'est pour ce soir:/transfert de data d'un fichier csv dans une base de données mysql
[Java]TCP Client ne marche que partiellement pkoi?[Resolu]OLE : savoir si un fichier word est deja ouvert ?
Copie de fichier 
Plus de sujets relatifs à : Lire une partie d'un fichier texte [résolu]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR