2017-08-17 2 views
0

Salut Stackoverflow personnes,lecture ligne de chaîne dans un fichier texte ne correspond pas

J'ai cette question dans mon développement du système, où je lignes d'enregistrement dans un fichier texte , et Je le récupère en utilisant BufferedReader et divisé chaque ligne par la conduite (|). J'utilise aussi Quartz pour exécuter cette lecture de fichier tous les jours. Quand je le teste, je règle le travail de quartz toutes les minutes pour que je puisse le tester s'il lit réellement le fichier dans chaque minute. Il lit toute la ligne dans le fichier texte en la vérifiant en utilisant ceci.

BufferedReader reader = new BufferedReader((newInputStreamReader(inputStream)); 
String line = null; 
int counter = 0; 
while((line = reader.readLine()) != null){ 
    counter++; 
} 
System.out.println(counter); 

Mais quand je partage l'String, le résultat de la récupération 4451 dossiers est incompatible. Parfois, il récupère seulement 1000+ à plus de 2000 enregistrements, et parfois il récupère 4451, mais pas de manière cohérente. C'est mon code.

try { 
BufferedReader reader = new BufferedReader((newInputStreamReader(inputStream)); 
String line = null; 
int counter = 0; 
String[] splitLine = null; 
while((line = reader.readLine()) != null){ 
    splitLine = line.split("\\|"); // Splitting the line using '|' Delimiter 
    for(String temp : splitLine) { 
     System.out.println(temp); 
    } 
    counter++; 
} 
System.out.println(counter); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Est-ce que la division de String et l'itération du fichier readfile en même temps peuvent être la cause?

EDIT: Aucune exception n'est survenue dans la situation. Il imprime seulement la longueur de en utilisant la variable counter.

Ma sortie attendue est Je souhaite récupérer tous les enregistrements par ligne dans le fichier texte et diviser la chaîne par ligne par pipe.counter est le nombre de lignes extraites.

+1

Peut-être que vous supprimez une exception. Montrez votre bloc try/catch complet. Et corrige les erreurs de compilation. – shmosel

+0

Salut @shmosel, je n'ai pas essayer/attraper dans cela, et il n'y a pas eu d'erreur. – msagala25

+0

Il doit y avoir un essai/catch quelque part. Il n'y a rien de mal avec le code que vous avez posté. Ne nous faites pas mendier un [mcve]. – shmosel

Répondre

-1

Le délimiteur de tuyau ne doit-il pas être simplement "|" au lieu de "\\|"?

Essayez de changer votre code:

splitLine = line.split("|"); // Splitting the line using '|' Delimiter 
+0

Non, 'split()' accepte une regex. – shmosel

+0

@shadow votre réponse est tout à fait fausse. Allez vérifier ici: https://stackoverflow.com/questions/10796160/splitting-a-java-string-by-the-pipe-symbol-using-split – Tavo

0

Je n'ai pas trouvé aucune erreur dans votre code, mais le code que j'ai écrit fonctionne parfaitement bien. Voici le code

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

class Test { 
    public static void main(String[] args) { 
     FileReader inputStream = null; 
     BufferedReader reader = null; 
     try { 
      inputStream = new FileReader("Input.txt"); 
      reader = new BufferedReader(inputStream); 
      String line = null; 
      int counter = 0; 
      String[] splitLine = null; 
      while ((line = reader.readLine()) != null) { 
       splitLine = line.split("\\|"); 
       for (String temp : splitLine) { 
        System.out.println(temp); 
       } 
       counter++; 
      } 
      System.out.println(counter); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       reader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}