读åå¨ä¼æç
§è¿æ ·çåè®®æ¥è¯»åï¼æ件头æ¯ä¸ä¸ªå符串å表ï¼èè®°å½éæ¯ä¸ä¸ªå符串å表çå表ã读åå¨æ¥åä¸ä¸ªjava.io.Reader对象ç¨ä¸ºè¯»åæ¥æºã å
ä»è¯»åæ件头å¼å§ã读åæ件头çç®æ³å¦ä¸ï¼ - æå¼èµæºåå¤è¯»åã - 读å第ä¸è¡ç¶å解æ - å°è¡æåé符åå²ã - å°è¯¥è¡è½¬åæä¸ä¸ªå符串å表åè¿å ä¸é¢æ¯å®çå®ç°ã
class CsvReader {
private static final String SEPARATOR = ";";
private final Reader source;
CsvReader(Reader source) {
this(source);
}
List<String> readHeader() {
try (BufferedReader reader = new BufferedReader(source)) {
return reader.lines()
.findFirst()
.map(line -> Arrays.asList(line.split(SEPARATOR)))
.get();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
ç¸å½ç®åï¼èªæ解éåçã类似çï¼å建äºä¸ä¸ªæ¹æ³æ¥è¯»åææçè®°å½ã读åè®°å½çç®æ³å¦ä¸ï¼
æå¼èµæºæ件è¿è¡è¯»å
è·³è¿é¦è¡
ç¨åé符åå²è¡ã
对æ¯è¡åºç¨ä¸ä¸ªmapæä½ï¼å°è¡æ å°å°ä¸ä¸ªå符串å表
ä¸é¢æ¯å®çå®ç°ï¼
class CsvReader {
List<List<String>> readRecords() {
try (BufferedReader reader = new BufferedReader(source)) {
return reader.lines()
.substream(1)
.map(line -> Arrays.asList(line.split(separator)))
.collect(Collectors.toList());
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
ä¼æ³¨æå°ä¸¤ä¸ªæ¹æ³ä¸çmapæ¯å ä¹ä¸æ ·çãäºå®ä¸ï¼å®å¯ä»¥æåå°ä¸ä¸ªåééé¢ï¼
Function<String, List<String>> mapper
= line -> Arrays.asList(line.split(separator));
æåäºä¸ªæµè¯æ¥å®ææ´ä¸ªè¿ç¨ã
public class CsvReaderTest {
@Test
public void readsHeader() {
CsvReader csvReader = createCsvReader();
List<String> header = csvReader.readHeader();
assertThat(header)
.contains("username")
.contains("visited")
.hasSize(2);
}
@Test
public void readsRecords() {
CsvReader csvReader = createCsvReader();
List<List<String>> records = csvReader.readRecords();
assertThat(records)
.contains(Arrays.asList("jdoe", "10"))
.contains(Arrays.asList("kolorobot", "4"))
.hasSize(2);
}
private CsvReader createCsvReader() {
try {
Path path = Paths.get("src/test/resources", "sample.csv");
Reader reader = Files.newBufferedReader(
path, Charset.forName("UTF-8"));
return new CsvReader(reader);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
温馨提示:答案为网友推荐,仅供参考