Scannen von *.txt - Dateien; wo sind der oder die Fehler?

  • Themenstarter MarkusFromBerne
  • Beginndatum
M

MarkusFromBerne

Mitglied
Ich habe ein kleines Programm, dass txt einliest, die darin enthalten Integers bearbeitet und mit den Resulten ein neues txt-File schreibt. Das Programm war vor ein paar Tagen lauffähig. So weit, so gut.

Jetzt will es aber nicht mehr! Ich suche seit 1h den Fehler und finde nichts. Das input-txt habe ich mit einem sehr ähnlichen Pogramm erfolgreich getestet, das sollte also nicht das Problem sein.
Ich erhalte als Fehlermeldung einen Inputmismatch. Das verstehe ich nicht, da ich ich int auf int zuordne.

Danke im Voraus!
Liebe Grüsse aus Bern,
Markus


Hier der Programmcode:
Java:
import java.util.Scanner;
import java.io.*;

class FileNameFromUserInput
{
  public static void main (String[] args) throws IOException
  {
    int num, square;  

    // Scanner for user input
    Scanner user = new Scanner( System.in );
    String  inputFileName, outputFileName;

    // prepare the input file
    System.out.print("Input File Name: ");
    inputFileName = user.nextLine().trim();
    File input = new File( inputFileName );    
    Scanner scan = new Scanner( "input" );    

    // prepare the output file
    System.out.print("Output File Name: ");
    outputFileName = user.nextLine().trim();
    PrintWriter output = new PrintWriter( outputFileName);    

    // processing loop
    while( scan.hasNext() )  
    {
      num = scan.nextInt();
      square = num * num ;    
      output.println("The square of " + num + " is " + square); //Ausgabe ins txt
      System.out.println("The square of " + num + " is " + square); //zur Kontrolle am Bildschirm
    }

    // close the output file
    output.close();
  }
}

Hier das Input-text bzw. dessen Inhalt (auch als file im Anhang: kapitel24a2.txt):
3
2
200
190
212
210
1
3
240
220
204
208
256
230
4
1
202
185

Das output-file ist leer, ich kann es darum hier nicht anhängen.


Hier die Fehlernmeldung, die ich erhalte:
java FileNameFromUserInput
Input File Name: kapitel24a2.txt
Output File Name: test.txt
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at FileNameFromUserInput.main(FileNameFromUserInput.java:28)

Und hier der Vollständigkeit halber der Code, der dasselbe file benutzt und bei dem es so läuft wie es soll:
Java:
import java.io.*;
import java.util.Scanner;

public class kapitel24a2 {
    public static void main ( String[] args ) throws IOException {
        int groupNr=0;        // die Gruppe, die momentan bearbeitet wird
        int numberOfIndi=0;   //Anzahl Individuen per Gruppe
        int averageStart=0;   // der Start-Durchschnitt einer Gruppe
        int averageFinal=0;   // der End-Durchschnitt eineer Gruppe
        int change=0;         // die Veränderung zwischen averageStart und averageFinal. Braucht nicht unbedingt ne eigene Variable, aber is klarer so
        int i=0;            //Zähler für die loops


        File file = new File ("kapitel24a2.txt");
        Scanner scan = new Scanner(file);
        Scanner user = new Scanner (System.in);

        // prepare the output file (zum debuggen)
        /* hier mit userabfrage, aber das nervt
        System.out.print("Output File Name: ");
        String outputFileName = user.nextLine().trim();
        PrintWriter output = new PrintWriter( outputFileName );
        */
        PrintWriter output = new PrintWriter( "kapitel24a2Debug.txt" );

        while ( scan.hasNext()){
            groupNr=scan.nextInt();                         //Feststellen, um welche Gruppe es geht
            numberOfIndi=scan.nextInt();                    //Feststellen, wieviele Indi DIESE Gruppe hat

            //Abhängig von Anzahl Indis kommende Zeilen/ints lesen (anzahl*2, weil jedes Indi 2 Zeilen hat)
            averageStart=0;         //löschen des letzten durchlaufes
            averageFinal=0;         //löschen des letzten durchlaufes
            for (i=0; i<numberOfIndi; i++){
                output.println("averageStart = "+averageStart);
                output.println("averageFinal = "+averageFinal);
                output.println("Scannen:");
                averageStart=averageStart+scan.nextInt();
                averageFinal=averageFinal+scan.nextInt();
                output.println("averageStart = "+averageStart);
                output.println("averageFinal = "+averageFinal);
                output.println("----------------------loop fertig---------------------");
            }

            //Durchschnitte und Veränderung berechnen
            averageStart=averageStart/numberOfIndi;
            averageFinal=averageFinal/numberOfIndi;
            change=averageFinal-averageStart;

            //Ausgabe auf screen
            System.out.println("Group "+groupNr+" has "+numberOfIndi+" subjects");
            System.out.println("\t average start: \t"+averageStart);
            System.out.println("\t average final: \t"+averageFinal);
            System.out.println("\t change: \t\t"+change);
        }

        // close the output file
        output.close();
       
        System.out.println("\ndone with processing");
    }
}
 

Anhänge

  • kapitel24a2.txt
    76 Bytes · Aufrufe: 1
kneitzel

kneitzel

Top Contributor
Java:
    File input = new File( inputFileName ); 
    Scanner scan = new Scanner( "input" );
Du gibst den Filenamen ein und öffnest dann aber die Datei "input" und nicht die Datei, dessen Filenamen du eingegeben hast.
Das hasNext() durchläuft vermute ich, dass es so eine Datei auch gibt nur eben hat sie in der ersten Zeile als erstes Token keine Zahl...

Edit: Nur um es noch zu verdeutlichen: Die Quotes um input sind vermutlich falsch. Du willst vermutlich die Variable input angeben und kein String Literal "input".
 
M

MarkusFromBerne

Mitglied
@kneitzel: Danke für deine Hinweise.

Die Filenamen-Sache hab' ich angepasst, dass ist wohl beim Ausprobieren durcheinander geraten.
Das hasNext() hab' ich wieder auf ein hasNextInt() zurückgeändert.

Ich erhalte jetzt zwar keine Fehlermeldungen mehr, das output-file ist aber trotzdem leer. Auf Bildschirm passiert auch nichts. Das bedeutet wohl, dass beim while etwas nicht stimmt, wohl die Abbruchbedingung.
Wenn ich hasNext() anstatt hasNextInt() teste, erhalte ich dieselbe Fehlermeldung wie am Anfang.
Wenn ich hasNext() und dazu Integer.parseInt(scan.hastNext()) versuche, erhalte ich java.lang.NumberFormatException

hier der leicht veränderte (Z23 und Z26) Code:
Java:
import java.util.Scanner;
import java.io.*;

class FileNameFromUserInput
{
  public static void main (String[] args) throws IOException
  {
    int num, square;  

    // Scanner for user input
    Scanner user = new Scanner( System.in );
    String  inputFileName, outputFileName;

    // prepare the input file
    System.out.print("Input File Name: ");
    inputFileName = user.nextLine().trim();
    File input = new File( inputFileName );    
    Scanner scan = new Scanner( inputFileName );    

    // prepare the output file
    System.out.print("Output File Name: ");
    outputFileName = user.nextLine().trim();
    PrintWriter output = new PrintWriter( outputFileName);    

    // processing loop
    while( scan.hasNextInt() )  
    {
      num = scan.nextInt();
      square = num * num ;    
      output.println("The square of " + num + " is " + square); //Ausgabe ins txt
      System.out.println("The square of " + num + " is " + square); //zur Kontrolle am Bildschirm
    }

    // close the output file
    output.close();
  }
}
 
kneitzel

kneitzel

Top Contributor
Also das scheint dann so zu sein, dass Du da irgendwas nicht ganz richtig liest.

Was man da dann machen könnte, wäre:
a) hasNext verwenden, damit er generell alle Token liest.
b) next() Aufruf verwenden, aber erst einmal direkt in einer Variable speichern.
c) Dann die Variable parsen. Dabei kannst Du dann entweder die Variable vorab ausgeben - dann siehst Du, was gelesen wurde - oder Du baust ein try / catch um das parsen / die Verarbeitung des Ergebnisses - dann kannst Du eine das gelesene im Fehlerfall ausgeben.

Dann kommst Du dem evtl. etwas mehr auf die Spur.

Das wäre dann schlicht sowas in der Art:
Java:
import java.io.*;
import java.util.Scanner;

public class FileNameFromUserInput {
    public static void main ( String[] args ) throws IOException {
    int num, square; 

    // Scanner for user input
    Scanner user = new Scanner( System.in );
    String  inputFileName, outputFileName;

    // prepare the input file
    System.out.print("Input File Name: ");
    inputFileName = user.nextLine().trim();
    File input = new File( inputFileName );   
    Scanner scan = new Scanner(input);  

    // prepare the output file
    System.out.print("Output File Name: ");
    outputFileName = user.nextLine().trim();
    PrintWriter output = new PrintWriter( outputFileName);   

    // processing loop
    while( scan.hasNext() ) 
    {
      String token = scan.next();
      System.out.println("'" + token + "'");
      num = Integer.parseInt(token);
      square = num * num ;   
      output.println("The square of " + num + " is " + square); //Ausgabe ins txt
      System.out.println("The square of " + num + " is " + square); //zur Kontrolle am Bildschirm
    }

    // close the output file
    output.close();
  }
}

Das funktioniert übrigens problemlos mit dem gegebenen File aus Deinem ersten Post. Du bist sicher, dass Du die Datei korrekt hast?

Und ganz wichtig: das String Literal beim Scanner Konstruktor gibt natürlich keinen Dateinamen an sondern den Text, der gescannt werden soll. Also da der Code mit der Datei funktioniert hast Du evtl. den Code angepasst und den Dateinamen direkt angegeben? Also etwas wie:
Java:
    inputFileName = user.nextLine().trim();
    Scanner scan = new Scanner(inputFileName);
funktioniert nicht! Denn das liest nicht die Datei, die inputFileName angibt sondern gibt den Dateinamen vom Scanner wieder!

Wenn Du die Token aber testweise wie im Code oben ausgibst, dann wirst Du dies auch sehen.
 
M

MarkusFromBerne

Mitglied
@kneitzel :
Vielen Dank für Deine Erläuterungen!
Das Problem lag tatsächlich in meiner Unsorgfältigkeit. Ich habe testweise ein fixes File beim Scanner eingegeben und dann beim rückgängig machen das falsche ge-copy&paste-d; "inputFileName" (->ein String) anstatt "input" (->ein file). Zu sehen in Z18.

Und dem war ich jetzt einen halben Vormittag lang auf der Spur...
Es gibt glaubs nicht viel, wo Qual und Freud' so nahe nebeneinander liegen wie Coden ;-)

Liebe Grüsse,
Markus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Schulprojekt: Mehrer PC's Hardware Scannen Java Basics - Anfänger-Themen 10
F Ordner in JAR scannen Java Basics - Anfänger-Themen 3
S Netzwerk nach ip adressen scannen Java Basics - Anfänger-Themen 7
Spin Scannen des Barcodes java Java Basics - Anfänger-Themen 13
Screen Text scannen und bearbeiten ! Java Basics - Anfänger-Themen 2
G Text aus Zwischenspeicher "scannen" Java Basics - Anfänger-Themen 3
S array scannen Java Basics - Anfänger-Themen 4
K Scannen Zahlen von Datei Java Basics - Anfänger-Themen 7
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
S Lese- / Schreibfähigkeit von Dateien sicherstellen Java Basics - Anfänger-Themen 1
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
M Formate für Dateien und Pfade? Java Basics - Anfänger-Themen 1
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
UnknownInnocent Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
A Dateien Verschieben Java Basics - Anfänger-Themen 1
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
E FTP Dateien hochladen Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
Korvinus Vergleichen von 2 csv-Dateien Java Basics - Anfänger-Themen 2
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
M "substring()" mit Dateien und Pfadangaben Java Basics - Anfänger-Themen 5
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
X Dateien direkt hintereinander schreiben, Dateiname Java Basics - Anfänger-Themen 25
G Messwerte in 2 Dateien schreiben Java Basics - Anfänger-Themen 20
C Verarbeitung von sehr großen Dateien Java Basics - Anfänger-Themen 52
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
Bluedaishi for schleife um Dateien wieder zusammen zu fügen Java Basics - Anfänger-Themen 11
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
E Dateien werden nicht gelöscht Java Basics - Anfänger-Themen 10
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
K JAR Dateien einbinden - funkt nicht wie es sollte... Java Basics - Anfänger-Themen 22
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
J *.sql Dateien in Java Java Basics - Anfänger-Themen 1
P Dateien im Ordner auflisten. Java Basics - Anfänger-Themen 3
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M Input/Output Arbeiten mit extrem vielen Dateien Java Basics - Anfänger-Themen 8
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
N tar-Dateien Java Basics - Anfänger-Themen 6
B Methoden Dateien konvertieren Java Basics - Anfänger-Themen 3
L Dateien speichern/auslesen Java Basics - Anfänger-Themen 5
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
F Classpath Dateien einbinden und Classpath durchsuchen Java Basics - Anfänger-Themen 2
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
U Best Practice Nicht-permanente Links auf Dateien Java Basics - Anfänger-Themen 5
B In welchem (Default) Pfad erstellt Java Dateien? Java Basics - Anfänger-Themen 4
I Methoden zum lesen und speichern von Dateien Java Basics - Anfänger-Themen 2
B .ut dateien ignorieren und fortsetzen Java Basics - Anfänger-Themen 9
R Ressourcen in JAR-Dateien Java Basics - Anfänger-Themen 2
J jar Dateien global erreichbar machen Java Basics - Anfänger-Themen 3
L Zusammenführen mehrerer .txt Dateien Java Basics - Anfänger-Themen 4
M Dateien erstellen/ bearbeiten/ lesen Java Basics - Anfänger-Themen 9
S Dateien in RAM kopieren und ausführen? Java Basics - Anfänger-Themen 4
O Java Dateien verschlüsseln? Java Basics - Anfänger-Themen 22
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
B Dateien kopieren, entpacken, XML auslesen! Java Basics - Anfänger-Themen 7
B Dateien Verschieben! Java Basics - Anfänger-Themen 8
B ältere Dateien verschieben Java Basics - Anfänger-Themen 3
G Erste Schritte Nach bestimmten Dateien suchen und dann in die Registry schreiben. Java Basics - Anfänger-Themen 6
J Laden von Dateien Java Basics - Anfänger-Themen 19
I Xml dateien zusammenfügen Java Basics - Anfänger-Themen 12
I Dateien in Ordner und Unterordner durchsuchen Java Basics - Anfänger-Themen 18
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
N Input/Output Große Dateien schnell Speichern/auslesen Java Basics - Anfänger-Themen 16
L Klassen Ich kann keine .jar Dateien mehr öffnen Java Basics - Anfänger-Themen 4
T Java Projekt als runnable jar file exportieren inklusive csv Dateien Java Basics - Anfänger-Themen 4
B Ordner in jar dateien einfügen Java Basics - Anfänger-Themen 4
FrozeTee .java Dateien unter Windows 7 werden nicht angezeigt Java Basics - Anfänger-Themen 7
D .jar Dateien hochladen Java Basics - Anfänger-Themen 13
B Input/Output Dateien >65536B über Sockets übertragen Java Basics - Anfänger-Themen 12
H CSV Dateien einlesen, ändern, speichern in Jtable Java Basics - Anfänger-Themen 5
F Dateien lesen klappt nicht Java Basics - Anfänger-Themen 2
D JFileChooser "alle Dateien" unterbinden Java Basics - Anfänger-Themen 3
K Jar erstellen - .png Dateien "mitgeben"? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben