介绍
在很多时候,数据是以CSV文件格式存放的。在提取CSV数据时,我们借助javacsv这个开源工具来处理,还是比较方便。
javacsv in pom.xml of Maven
<dependency> <groupId>net.sourceforge.javacsv</groupId> <artifactId>javacsv</artifactId> <version>2.0</version> </dependency>
import java.io.FileNotFoundException; import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import util.CommonTool; import com.csvreader.CsvReader; /** * @author shengshu * */ public class CsvCmHandle { private static final Logger logger = LogManager.getLogger(CsvCmHandle.class); private static Map<String, Map<String, String>> cmMap = new ConcurrentHashMap<String, Map<String, String>>(); /** * * * <p> * Read CSV file and store records into Map. * * @param csvFilePath * @return */ public static Map<String, Map<String, String>> csvCmHandle(String csvFilePath) { logger.info("CSV File: " + csvFilePath); Map<String, String> cmRecordMap = null; String fileName = FilenameUtils.getBaseName(csvFilePath); try { CsvReader csvReader = new CsvReader(csvFilePath); csvReader.readHeaders(); // Get CSV header array String[] csvHeaderArray = csvReader.getHeaders(); // Ignore the headers when start to read records while (csvReader.readRecord()) { String[] csvRecordValueArray = csvReader.getValues(); int csvRecordValueArrayLength = csvRecordValueArray.length; StringBuilder lineRecordStringBuilder = new StringBuilder(); for (int index = 0; index < csvRecordValueArrayLength; index++) { lineRecordStringBuilder.append(csvRecordValueArray[index]); } // Continue next cycle when it's empty record if (StringUtils.trimToEmpty(lineRecordStringBuilder.toString()).equals("")) { break; } int csvHeaderArrayLength = csvHeaderArray.length; cmRecordMap = new ConcurrentHashMap<String, String>(); for (int index = 0; index < csvHeaderArrayLength; index++) { String fieldName = csvHeaderArray[index]; String fieldValue = StringUtils.trimToEmpty(CommonTool.convertReserveSymbel(csvReader.get(fieldName), false)); logger.info("Field Name = Value: " + fieldName + " = " + fieldValue); // Put fieldName(Key) and fieldValue(Value) into Map as one record cmRecordMap.put(fieldName, fieldValue); } } csvReader.close(); // Store entire CSV records into Map(Key: fileName; Value: recordMap) cmMap.put(fileName, cmRecordMap); } catch (FileNotFoundException fnfe) { fnfe.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } return cmMap; } }