簡體   English   中英

為什么掃描程序會每隔一行讀取CSV文件? Java的

[英]Why does Scanner read every other line of CSV file? Java

我正在讀取CSV文件,並將每個定界元素放入二維數組中。 代碼如下:

public DataProcess(String filename, String[][] contents, int n) {//n is 6 for contents, 5 for fiveMinContents
        Scanner fileReader = null;
        try {
            fileReader = new Scanner(new File(filename));
        } catch (FileNotFoundException ex) {
            System.out.println(ex + " FILE NOT FOUND ");
        }
        fileReader.useDelimiter(",");
        int rowIndex = 0;
        while (fileReader.hasNext()) { 
            for (int j = 0; j < n; j++) {
                contents[rowIndex][j] = fileReader.next();
                 System.out.println("At (" + rowIndex +", "+j+"): " +
                 contents[rowIndex][j]);
            }
            rowIndex++;
            fileReader.nextLine();
        }
    }

我不確定為什么它會讀取此特定CSV文件的其他所有行,因為這是以這種方式讀取的文件2/2。 第一個沒問題,但是現在這個跳過了其他每一行。 為什么它對一個有效,但對另一個無效? 我正在Eclipse的最新更新上運行它。

我也簽出了這個答案,它沒有幫助。

因為循環的最后一行將讀取並丟棄該行。 您需要類似的東西,

while (fileReader.hasNextLine()) { 
    String line = fileReader.nextLine();
    contents[rowIndex] = fileReader.split(",\\s*");
    System.out.println("At (" + rowIndex + "): "
            + Arrays.toString(contents[rowIndex]));
    rowIndex++;
}

您也可以通過一個調用來打印多維數組,例如

System.out.println(Arrays.deepToString(contents));

盡管該方法可能對您有用,但這並不是最佳選擇。 有用於Java的預制CSV閱讀器。 一個例子是commons-csv

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
    String date = record.get(1);
    String time = record.get(2);
    // and so on, so forth
}

在類路徑上必須有少量依賴項 希望能有所幫助。

我找到了這個問題的問題。

首先,我建議使用建議的外部庫。

問題在於,由於第二個文件正在讀取整行,而第一個CSV文件正在讀取我想要的內容,但是文件末尾有一列我忽略了。 一定有一種結構化CSV文件的方式,其中行的末尾具有不同的分隔符或沿這些行的內容-不確定。 為了解決這個問題,我剛剛在第二個文件中添加了一個額外的列,但我沒有讀進去。 它就在那里。

簡而言之,請使用外部CSV閱讀器庫。 如果您不想這樣做,則只需在文件中的最后一列之后直接添加一列,而不讀取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM