2017-02-08 1 views
2

Je me bats avec un problème étrange. Tout d'abord, je n'ai aucune chance de changer le chemin, le fichier est créé; C'est la responsabilité des vendeurs.TextFile contient EOF. Comment lire à la vraie EOF?

Sur un serveur IBM Domino, je crée un fichier de réponses pour la commande "tell traveler show user". Le fichier est un fichier texte. Dans certaines circonstances (voir http://www.eknori.de/2017-02-05/fun-with-ibm-traveler-and-java/ pour l'histoire complète) le fichier contient un caractère -1 (EOF) au milieu du fichier.

J'ai essayé plusieurs façons de lire le fichier (BufferedReader, Scanner, InputStream, LineIterator et autres), mais tous vérifient -1 ou NULL comme indicateur pour EOF.

Je suis à court d'options. Est-ce que quelqu'un a une idée, comment obtenir toutes les données du fichier?

MISE À JOUR:

Voici le contenu des fichiers créés et ce que je reçois sur la console du serveur (et BufferedReader)

All Good

Reading stopped

Il n'y a pas de différence dans HEX, mais le second cesse de traiter le fichier.

+0

C'est impossible. Un octet est '0-255', donc il n'y a pas de -1 dans le fichier.La méthode 'read()' renvoie un int afin qu'il retourne des valeurs d'octets et -1 pour indiquer EOF. – Kayaman

+0

@Kayaman Ce ne sont pas des octets, ce sont des caractères. Le blog de l'OP montre qu'il lit des caractères. Mais encore: vous ne devriez jamais être capable de lire un caractère -1. –

+0

@Ulrich Quelle est l'octet réel des données du fichier autour de l'endroit où vous obtenez le -1? –

Répondre

0

Je ne sais pas mais je pense que vous devriez essayer autre encodage par défaut plutôt que dans ce cas EOF peut-être rencontré comme caractère différent & votre FileInputStream ne sera pas terminée à ce moment-là. Mais pour ce faire, vous devez convertir le texte lu en texte réel en utilisant la technique appropriée.

0

Vous pouvez lire le flux dans un tableau d'octets [] (ou un ByteBuffer), puis la méthode read renvoie le nombre d'octets lus.

Peu importe que - à mon humble avis, vous devriez considérer:

  • lors de l'utilisation du BufferedReader, le readLine() peut retourner null à la fin du fichier, c'est la raison pour laquelle vous obtenez le NullPointerException sur la trim() méthode

  • si vous lisez octets, ils auront des valeurs de 0-255, mais cela ne signifie pas que vous pouvez les convertir dans le texte

  • Vérifiez la taille du fichier - le fichier est peut-être incomplet lorsque vous essayez de le lire et le fichier se termine réellement (méthode read renvoie la valeur 0-255 pour data ou -1 pour EOF), donc le flux d'entrée lit le fichier jusqu'à la fin

0

bien "BufferedReader" fonctionne très bien pour votre problème, juste essayé

public class ee { 
 
\t public static void main(String[] args) { 
 
\t \t String thisLine = ""; 
 
\t  try{ 
 
\t   BufferedReader br = new BufferedReader(new FileReader(new File("C:/Users/rathi.ankush/Desktop/temp.txt"))); 
 
\t   while ((thisLine = br.readLine()) != null) { 
 
\t    System.out.println(thisLine); 
 
\t   }  
 
\t  }catch(Exception e){ 
 
\t   e.printStackTrace(); 
 
\t  } 
 
\t } 
 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>

+1

C'est le même code que j'ai utilisé initialement. En outre, j'ai mis à jour mon poste avec la sortie de la console en utilisant votre code. –