2016-04-12 69 views
-2

我正嘗試在文件的開始處以3個短褲讀取.csv文件。我需要閱讀它們,我正在設置一個變量,但它似乎沒有拉入正確的數據。在RandomAccessFile中讀短褲.csv

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]; 

文件的第3個短褲應該是05,11,22,但我得到12344時,我在此位

+0

的建議我建議使用一個圖書館閱讀CSV文件,如果你沒有限制。 (https://commons.apache.org/proper/commons-csv/) – dumitru

回答

1

從Java文檔的RandomAccessFile#readShort

從此文件讀取一個符號的16位數字。該方法從該文件讀取兩個 字節,從當前文件指針開始。如果兩個 字節讀,爲了爲b1和b2,其中每個的兩個值是0和255之間 ,包容,那麼結果是等於:

(短)((B1 < < 8)| B2)

此方法一直阻塞的兩個字節被讀取,檢測到流 的末尾或者拋出異常

現在讓我們看看什麼是你的情況發生,假設你讀的第一個短值是05

readShort讀取兩個字節它將讀取0作爲48和5 53(記住ASCII碼),然後將它應用於上面提到的公式來它賦予

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

所以你看到這些值在你的短變量中。

您應使用掃描儀#nextShort通過EJP

+0

掃描儀與RandomAccessFile不兼容,對吧? – user3038573

+0

不,它不是。您必須使用掃描儀對象順序讀取它 – Sanjeev

1

CSV文件是文本的結尾打印出米它不包含短褲,您不能期望在其上使用RandomAccessFile.readShort()。更可能的是,你應該使用Scanner.nextShort()

+0

好的。所以我讓Scanner作爲文件的緩衝讀取器? – user3038573