2016-04-12 10 views
-2

Ich versuche, in einer CSV-Datei mit 3 Kurzschlüssen am Anfang der Datei zu lesen. Ich muss sie einlesen und ich setze auf eine Variable, aber es scheint nicht die richtigen Daten zu ziehen.Kurz in einer RandomAccessFile .csv lesen

private short M = 0; 
private short rootPtr = 0; 
private short N = 0; 
RandomAccessFile file; 
private short[] TP; // array of TPs for one node 
private String[] KV; // array of KVs for one node 
private short[] DRP; // array of DRPs for one node 
private int nodesRead; // iterator for nodes read 
private int sizeOfDataRec; // stores size of data record: (M - 1) * (7) + 2 

    // sets values from header record 
    file.seek(0); 
    M = file.readShort(); 
    rootPtr = file.readShort(); 
    N = file.readShort(); 
    sizeOfDataRec = (M - 1) * (7) + 2; // sets size of data record 
    TP = new short[M]; 
    KV = new String[M - 1]; 
    DRP = new short[M - 1]; 

Die ersten 3 Shorts der Datei sollten 05,11,22 sein, aber ich bekomme, wenn ich 12344 M dieses Bits am Ende auszudrucken ist

+0

ich eine Bibliothek empfehlen die Verwendung für CSV-Datei zu lesen, wenn Sie keine Einschränkungen haben. (https://commons.apache.org/proper/common-csv/) – dumitru

Antwort

1

Von Java Docs von RandomAccessFile#readShort

verwenden Liest ein 16-Bit-Zahl aus dieser Datei. Die Methode liest zwei Bytes aus dieser Datei beginnend mit dem aktuellen Dateizeiger. Wenn die beiden Bytes lesen, um, sind b1 und b2, wobei jeder der beiden Werte ist zwischen 0 und 255 einschließlich ist, dann ist das Ergebnis gleich:

(kurz) ((b1 < < 8) | b2)

Diese Methode blockiert, bis die zwei Bytes gelesen werden, das Ende des Stroms erkannt wird oder eine Ausnahme

geworfen

Jetzt können sehen, was in Ihrem Fall geschieht, Angenommen, der erste kurze Wert, den Sie lesen, ist 05

wenn readshort zwei Bytes liest, wird es 0 als 48 und 5 als 53 gelesen (ASCII-Codes erinnern) und dann gilt es für sie oben genannten Formel, welche

(48 << 8) | 53 = 12288 + 53 = 12341 

gibt also sind diese Werte zu sehen in deinen kurzen Variablen.

Sie sollen Scanner # nextShort verwenden, wie von EJP vorgeschlagen

+0

Scanner ist nicht kompatibel mit einer RandomAccessFile, oder? – user3038573

+0

Nein, ist es nicht. Sie müssen es sequentiell mit einem Scanner-Objekt lesen – Sanjeev

1

Eine CSV-Datei Text. Es enthält keine Kurzschlüsse, und Sie können nicht erwarten, RandomAccessFile.readShort() darauf zu verwenden. Wahrscheinlicher ist, sollten Sie Scanner.nextShort() usw.

+0

Ok. Also mache ich Scanner als gepufferten Leser für die Datei? – user3038573