0

すべて固定の列番号を持つ異なる CSV ファイルを読みたいのですが、2 つの異なるファイルには 2 つの異なる列番号があります。すべてのファイルにはヘッダー行があります。そのため、最初に CSVListReader を使用してヘッダーと列番号を取得し、次にセル プロセッサと CSV BeanReader を構築して実際の行を POJO にマップします。最初に、InputStreamReaders を superCsv リーダー コンストラクターに渡して機能させようとしましたが、機能しません。ただし、FileReaders または BufferedReaders では問題なく動作します。これはバグですか、それともこの状況で InputStremReaders を使用する意味がありませんか?

これが実際のコード例です

CsvListReader listReader = null;
FileReader file = null;
BufferedReader b = null;
try {
    file = new FileReader(linkToFile);
    b = new BufferedReader(file);
    listReader = new CsvListReader(b,
            CsvPreference.STANDARD_PREFERENCE);
    csvHeader = listReader.getHeader(true);
} catch (IOException e) {
    logger.info("Did not manage to get the Csv Header", e);
    try {
        listReader.close();
        file.close();
    } catch (IOException e1) {
        logger.info("Problem trying to close the readers", e1);
        return;
    }

  }
try {
    file = new FileReader(linkToFile);
    b = new BufferedReader(file);
    beanReader = new CsvBeanReader(b,
            CsvPreference.STANDARD_PREFERENCE);
    beanReader.getHeader(false);

    extractCSV(beanReader, csvHeader);
 catch (IOException e) {
    logger.info("Did not manage to get a working CsvBeanReader.", e);
    try {
        beanReader.close();
        listReader.close();
        file.close();
    } catch (IOException e1) {
        logger.info("Problem trying to close the readers", e1);
    }
    return;
}

前もって感謝します

4

1 に答える 1

0

Hound Doc コメントによると、混乱の理由は、さまざまなリーダーを閉じるという不適切な管理にありました。以下は、入力ストリームリーダーを使用した作業コードです

   // Reading the Header. A CsvListReader object is used here as it can
    // read a variable number of columns in the first line (see
    // http://supercsv.sourceforge.net/readers.html)
    CsvListReader listReader = null;
    InputStreamReader b = null;
    try {
        b = new InputStreamReader(new BufferedInputStream(new FileInputStream(linkToFile)));
        listReader = new CsvListReader(b, CsvPreference.STANDARD_PREFERENCE);
        csvHeader = listReader.getHeader(true);
    } catch (IOException e) {
        logger.info("Did not manage to get the Csv Header", e);
    } finally {
        try {
            listReader.close();
        } catch (IOException e1) {
            logger.info("Problem trying to close the readers", e1);
            return;
        }
    }

    // Using the CSV bean reader to read the file. Now we know the number of
    // columns
    // A CsvBeanReader object is the choice to extract easier to POJO
    // structure
    CsvBeanReader beanReader = null;

    try {
        b = new InputStreamReader(new BufferedInputStream(new FileInputStream(linkToFile)));
        beanReader = new CsvBeanReader(b, CsvPreference.STANDARD_PREFERENCE);
        // beanReader starts reading from line 2 (see above)
        // it is as if we would be reading a file without a header
        beanReader.getHeader(false);

        extractCSVContacts(beanReader, csvHeader);

    } catch (IOException e) {
        logger.info("Did not manage to get a working CsvBeanReader.", e);
       return;
    }
    finally {
        try {
            beanReader.close();
        } catch (IOException e1) {
            logger.info("Problem trying to close the readers", e1);
        }
    }
于 2013-09-18T10:25:52.097 に答える