2014-04-25 4 views
3

Je suis un étudiant et j'ai un projet en Java et j'essaye de lire des fichiers et de les mettre dans un constructeur. Le fichier que je suis en train de lire est sous cette forme:Le code pour lire à partir d'un fichier et le mettre dans un constructeur ne fonctionnera pas

2 Sciense [mr ali hassan 14/4/1993 ] Ali Hhassan 13234 12/3/1998 123 1234567891234 1234567891 engineer 
2 Sciense [mr ali hassan 14/4/1993 ] Ali Hhassan 13234 12/3/1998 123 1234567891234 1234567891 null 
. 
. 
. 
etc 

Je suis en train de lire les jetons du jeton de ligne par jeton et mettre chacun d'eux dans mon constructeur. Voici mon code:

Je sais que j'ai beaucoup de flux dans l'écriture de mes cours, parce que j'ai commencé à apprendre la programmation Java il y a environ 4 mois, mais ce que j'essaie de faire est de lire la première ligne de le fichier et séparer chaque jeton dans celui-ci j'ai essayé d'améliorer mon code pour verrouiller comme ceci, Fichier F = new File ("Book.txt");

 Scanner fileInput = new Scanner (F); 
     while (fileInput.hasNextLine()){ 
     String Line = fileInput.nextLine();  
     Scanner readLline = new Scanner(Line);  

     while(readLline.hasNext()){ 
     //reads line by line 
     readBook.setNumOfAuthor(readLline.nextInt()); 
     readBook.SetAplicationTitle(fileInput.next(Line)); 
     String GetRedOf = fileInput.next();  
     ba.setStatus(fileInput.next()); 
     ba.setFirstName(fileInput.next()) ; 
     ba.setLastName(fileInput.next()); 
     Adate.setDay(fileInput.nextInt()); 
     String GetRedOf3 = fileInput.next(); 
     Adate.setMonth(fileInput.nextInt()); 
     String GetRedOf4 = fileInput.next(); 
     Adate.setYear(fileInput.nextInt()) ; 
     // String comma = fileInput.next(); 
     String GetRedOf2= fileInput.next(); 
     bb.setName(fileInput.next()); 
     bb.setAdress(fileInput.next()); 
     bb.setphneNumber(fileInput.next()); 
     publicationDate.setDay(fileInput.nextInt()) ; 
     String getred = fileInput.next(); 
     publicationDate.setMonth(fileInput.nextInt()); 
     String getred1 = fileInput.next(); 
     publicationDate.setYear(fileInput.nextInt()) ; 
     readBook.SetNumOfPUblication(fileInput.nextInt()); 
     readBook.setIsbn13(fileInput.next()) ; 
     readBook.setIsbn13(fileInput.next()); 
     readBook.SetCatagory(fileInput.next());    





     } 

Pouvez-vous m'aider à résoudre son problème s'il vous plaît!

c'est l'erreur que je vais avoir Exception dans le thread "principal" java.util.NoSuchElementException à java.util.Scanner.throwFor (Scanner.java:907)

à java.util.Scanner .next (Scanner.java:1530)

at java.util.Scanner.next(Scanner.java:1463) 

at TestPublications.ReadBook(TestPublications.java:260) 

at TestPublications.main(TestPublications.java:232) 

Java Résultat: 1 ligne 260 est

readBook.SetAplicationTitle (fileInput.next (ligne));

+0

Vous recommande fortement 1. lire une ligne du fichier à une chaîne et 2. décomposer la chaîne plutôt que d'essayer de supposer intelligemment que .Next va vous obtenir le Les données tu veux. Il vous permettra également de valider correctement toutes vos entrées –

+1

Quelle ligne est TestPublications.java:258? –

+1

Cela devrait être facile à déboguer. Définissez simplement un point d'arrêt sur TestPublications.java:258. L'exception signifie que vous essayez de lire quelque chose sous la forme d'un entier qui n'est pas un nombre entier. – BetaRide

Répondre

0
Sciense [mr ali hassan 14/4/1993 ] Ali Hhassan are not valid integer. 

1.Premièrement Chaîne lue

String str = readLline.next(); 

2. Utilisez la méthode Integer.parseInt() pour pour valider l'entrée entière.

supposer

try{ 
    Integer.parseInt(ste); 
} 
catch(NumberFormatException ex){ 
    System.out.println("Its not a valid Integer"); 
} 

0

Pour la première ligne:

2 Sciense [mr ali hassan 14/4/1993 ] Ali Hhassan 13234 12/3/1998 123 1234567891234 1234567891 engineer 
scanner

fonctionne comme suit:

int numofaouthers = fileInput.nextInt(); // 2 
String SetAplicationTitle =fileInput.next(); // Sciense 
String GetRedOf = fileInput.next(); // [mr 

String Status = fileInput.next(); // ali 

Il est déjà mal ici ...

0

Le InputMismatchException indique que ce qui est en cours de lecture de votre fichier ne correspond pas au type de données que vous essayez de le stocker. L'erreur est à la ligne 258 de votre classe (tour sur les numéros de ligne dans votre éditeur). Je soupçonne que c'est un de vos int, vous essayez soit de lire dans un String à un int, ou vous débordez un int (c'est-à-dire que le nombre que vous lisez est supérieur à MAX_INT). Sur une note de côté, vous devez utiliser des noms en minuscules pour vos noms de variables. La façon dont vous l'avez écrit est difficile à dire un nom de variable d'un nom de classe.

Voici le JavaDoc pour l'exception:

http://docs.oracle.com/javase/7/docs/api/java/util/InputMismatchException.html

+0

Je sais que j'ai beaucoup de flux dans l'écriture de mes cours, parce que j'ai commencé à apprendre la programmation java il y a environ 4 mois, mais j'essaie de lire la première ligne du fichier et de séparer chaque jeton J'ai essayé d'améliorer mon code pour verrouiller comme ça, – user3573440

0

Je recommande d'utiliser des expressions régulières et d'extraire des données à partir de là. Peut-être quelque chose comme ceci:

BufferedReader reader = new BufferedReader(new FileReader("input.txt")); 

String regex = "([0-9]+) ([a-zA-Z]+) \\[(.+)\\].+"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher; 

String line; 
while ((line = reader.readLine()) != null) { 
    System.out.println(line); 
    matcher = pattern.matcher(line); 
    if (matcher.find()) { 
     System.out.printf("1:%s 2:%s 3:%s", matcher.group(1), 
       matcher.group(2), matcher.group(3)); 
    } 
    break; 
} 

Cet exemple correspond à 3 groupes:

1: 2 2: Sciense 3: mr ali hassan 14/4/1993

Prolonger la regex la ligne entière et vous avez terminé :-)

+0

j'ai un constructeur sans argument, ma méthode lit le fichier et asigne chaque jeton à un attribut au constructeur, avez-vous une autre méthode que je peux utiliser pour ce problème, merci – user3573440

+0

Vous ligne 'Scanner fileInput = new Scanner (F);' crée un scanner avec le nom de fichier 'F', n'est-ce pas? Pourquoi ne pouvez-vous pas utiliser un BufferedReader à ce stade? –

Questions connexes