我的tsv文件包含:
tax_id GeneID Symbol
9606 1 A1BG
TsvReader.java
private static CellProcessor[] getProcessors() {
final CellProcessor[] processors = new CellProcessor[] {
new NotNull(), // tax_id
new NotNull(), // GeneID
new NotNull(), // Symbol
};
return processors;
}
private static void readCsvBeanReader() throws Exception {
ICsvBeanReader beanReader = null;
try {
beanReader = new CsvBeanReader(new FileReader(CSV_FILENAME),
CsvPreference.TAB_PREFERENCE);
// the header elements are used to map the values to the bean (names
// must match)
final String[] header = beanReader.getHeader(true);
final CellProcessor[] processors = getProcessors();
TsvEntities tsv_ent;
while ((tsv_ent = beanReader.read(TsvEntities.class, header,
processors)) != null) {
System.out.println(String.format("tsv_ent=%s",tsv_ent));
}
} finally {
if (beanReader != null) {
beanReader.close();
}
}
}
TsvEntities.java
package com.tsvreader;
public class TsvEntities {
private Integer tax_id;
private Integer GeneID;
private String Symbol;
public TsvEntities() {
}
public TsvEntities(final Integer tax_id, final Integer GeneID, final String Symbol){
this.tax_id = tax_id;
this.GeneID= GeneID;
this.Symbol=Symbol;
}
public Integer getTax_id() {
return tax_id;
}
public void setTax_id(Integer tax_id) {
this.tax_id = tax_id;
}
public Integer getGeneID() {
return GeneID;
}
public void setGeneID(Integer geneID) {
this.GeneID = geneID;
}
public String getSymbol() {
return Symbol;
}
public void setSymbol(String symbol) {
this.Symbol = symbol;
}
@Override
public String toString() {
return String
.format("TsvEntities [tax_id=%s, GeneID=%s, Symbol=%s]",getTax_id(), getGeneID(), getSymbol());
}
展览:
Exception in thread "main" org.supercsv.exception.SuperCsvReflectionException: unable to find method setTax_id GeneID Symbol(java.lang.String) in class com.tsvreader.TsvEntities - check that the corresponding nameMapping element matches the field name in the bean, and the cell processor returns a type compatible with the field
context=null
at org.supercsv.util.ReflectionUtils.findSetter(ReflectionUtils.java:183)
at org.supercsv.util.MethodCache.getSetMethod(MethodCache.java:95)
at org.supercsv.io.CsvBeanReader.populateBean(CsvBeanReader.java:158)
at org.supercsv.io.CsvBeanReader.read(CsvBeanReader.java:207)
at com.tsvreader.TsvReader.readCsvBeanReader(TsvReader.java:59)
at com.tsvreader.TsvReader.main(TsvReader.java:17)
最佳答案
乍一看,我想说的是您的问题是public void setTax_id(Integer tax_id)
带有一个Integer
参数,但是SuperCsv希望它带有一个String
。您应该提供采用setTax_id
的String
方法。 setGeneID
也应如此。
编辑:
第一部分不正确。似乎文件的标题未正确解析。 SuperCsv将整行解释为方法名称。检查第一行是否正确分隔。
(从您的问题来看,第一行似乎由空格而不是制表符分隔。)