Le scanner Java ne passe pas par le fichier entier
Je suis en train d'écrire un programme en Java et l'une des choses que j'ai besoin de faire est de créer un ensemble de chaque emplacement valide pour un problème de plus court chemin. Les emplacements sont définis dans un .fichier txt qui suit un modèle rigoureux (une entrée par ligne, pas de supplément des espaces) et est parfait pour l'utilisation .nextLine pour obtenir les données. Mon problème est que 241 lignes dans le fichier (de 432) le scanner s'arrête aux 3/4 de la manière grâce à une entrée et ne reconnaît pas toutes les nouvelles lignes.
Mon code:
//initialize state space
private static Set<String> posible(String posLoc) throws FileNotFoundException {
Scanner s = new Scanner(new File(posLoc));
Set<String> result = new TreeSet<String>();
String availalbe;
while(s.hasNextLine()) {
availalbe = s.nextLine();
result.add(availalbe);
}
s.close();
return result;
}
Les Données
Shenlong Gundam
Altron Gundam
Tallgee[scanner stops reading here]se
Tallgeese II
Leo (Ground)
Leo (Space)
Bien sûr, le scanner s'arrête de lire ici" n'est pas dans les données, je suis juste de marquage où le scanner s'arrête la lecture du fichier. C'est 3068 octets dans le fichier, mais cela ne devrait pas affecter n'importe quoi parce que dans le même programme, avec à peu près identique de code, je suis en train de lire un 261 ligne, 14KB .fichier txt qui encode les chemins. Toute aide serait appréciée.
Merci.
source d'informationauteur Fizzmaister
Vous devez vous connecter pour publier un commentaire.
Il y a un problème avec le Scanner de la lecture de votre fichier, mais je ne suis pas sûr de ce qu'il est. Il croit à tort qu'il a atteint la fin de fichier lorsqu'il n'a pas, peut-être due à certains funky de codage de la Chaîne. Essayez d'utiliser un BufferedReader objet qui encapsule un objet FileReader à la place.
par exemple,
Modifier
J'ai essayé de réduire votre problème à son strict minimum, et ceci est suffisant pour obtenir le problème:
J'ai vérifié le Scanner objet avec un printf:
et a montré qu'il pensait que le fichier était terminé. J'étais en train de progressivement à la suppression de lignes de données dans un fichier pour voir les ligne(s) à l'origine du problème, mais laisse faire.
J'ai rencontré le même problème et c'est ce que j'ai fait pour résoudre le problème:
J'ai eu le même problème. Le scanner ne serait pas lu jusqu'à la fin d'un fichier, en fait arrêter en plein milieu d'un mot. Je pensais que c'était un problème avec une limite fixée sur le scanner, mais j'ai pris note de l'observation de rfeak sur le codage de caractère.
J'ai ré-enregistré le
.txt
j'étais en train de lire desUTF-8
il a résolu le problème. Il s'avère que le bloc-notes avait manqué à la norme ANSI.J'ai eu un fichier txt dans lequel Scanner arrêté de lire à la ligne 862, c'était un problème bizarre. Ce que j'ai fait a été de créer un fichier différent (pour essayer de reproduire le problème). Je l'ai ajouté à moins de 862 premières lignes, puis j'ai ajouté plus de 862 et il a bien fonctionné.
Donc, je crois que le problème est que sur mon précédent fichier, à la ligne 862, il y a quelque chose de mal, comme certains le caractère ou le symbole qui pourrait avoir induit en erreur Scanner à terminer la lecture de début.
En conclusion: sur la base de cette expérience, je recommande de trouver la ligne exacte où le scanner s'arrête de lire pour trouver une solution pour genre de problèmes.
Vous devez utiliser ce :
Scanner scanner = new Scanner(fileObj).useDelimiter("\z");
Système..println(scanner.next());