Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Java ::  java.util.Scanner und NoSuchElementException     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Kohlensalbe
Unregistrierter




Beitrag Kohlensalbe Unregistrierter 13:28:15 15.09.2016   Titel:   java.util.Scanner und NoSuchElementException            Zitieren

Ich habe einen Scanner, da übergebe ich ein java.io.File an den Konstruktor. Wenn ich nun ein Byte auslesen möchte, schlägt das sofort fehl, obwohl der Dateiname richtig übergeben wurde und die Größe 863329 Bytes groß ist.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class parser{
...
 
    private void parse_three_bytes(byte array[], Scanner scanner){
 
        if(scanner.hasNextByte()){
            array[0] = scanner.nextByte();
...
        }
 
        else
            throw new RuntimeException("Invalid GIF format");
    }
 
    public void parse(String file_path) throws FileNotFoundException{
        Scanner scanner = new Scanner(new File(file_path));
 
        parse_three_bytes(signature, scanner);
...
    }
}


Es wird eine RuntimeException geworfen, in Zeile 12. Was mach ich falsch mit dem Scanner?
Jockelx
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.12.2009
Beiträge: 1154
Beitrag Jockelx Mitglied 15:05:29 15.09.2016   Titel:              Zitieren

Wieso scanner?
Scanner liest bis zum nächsten delimiter (default ws).
Ein Gif fängt doch so an: "GIF...".
Kohlensalbe
Unregistrierter




Beitrag Kohlensalbe Unregistrierter 15:31:26 15.09.2016   Titel:              Zitieren

Jockelx schrieb:
Scanner liest bis zum nächsten delimiter (default ws).
Ein Gif fängt doch so an: "GIF...".


Deshalb ja auch nextByte().
Das, was du meinst ist next().

Ich habe versucht mit dem Scanner ein nextByte() zu machen, direkt nachdem ich den Scanner angelegt habe, doch bekomme direkt die NoSuchElementException, obwohl die Datei 863329 Bytes groß ist. Als wäre mein Stream trotzdem leer.
Kohlensalbe
Unregistrierter




Beitrag Kohlensalbe Unregistrierter 17:23:10 15.09.2016   Titel:              Zitieren

Hat jetzt mit einem RandomAccessFile geklappt.
Mich würde aber interessieren warum der Scanner fehlschlug?
Tobiking2
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.04.2009
Beiträge: 962
Beitrag Tobiking2 Mitglied 06:20:20 16.09.2016   Titel:              Zitieren

Kohlensalbe schrieb:
Mich würde aber interessieren warum der Scanner fehlschlug?

Das was Jockelx geschrieben hat stimmt schon. Die Scanner Klasse ist für Text parsing gedacht. Das nextByte() liest bis zum nächsten delimiter und versucht die Zeichen als Zahl zu parsen und in ein byte zu schreiben. Wenn dein File mit "100 " anfangen würde ginge das. Aber "GIF..." ist keine Zahl und daher schlägt es fehl.
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4282
Beitrag Th69 Mitglied 08:30:46 16.09.2016   Titel:              Zitieren

Für Binärdateien (bzw. Binärdaten) solltest du evtl. besser andere Klassen benutzen, s. z.B. Reading and writing binary files.

Probier mal DataInputStream (welches das Interface DataInput implementiert).
C++ Forum :: Java ::  java.util.Scanner und NoSuchElementException   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.