을 하겠어 어디
import java.io.FileReader;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.constraint.NotNull;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;
public class readWithCsvBeanReader {
public static void main(String[] args) throws Exception{
readWithCsvBeanReader();
}
private static void readWithCsvBeanReader() throws Exception {
ICsvBeanReader beanReader = null;
try {
beanReader = new CsvBeanReader(new FileReader("C:\MAP TSV\abc.tsv"), 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();
TSVReaderBrandDTO tsvReaderBrandDTO = new TSVReaderBrandDTO();
int i = 0;
int last = 0;
while((tsvReaderBrandDTO = beanReader.read(TSVReaderBrandDTO.class, header, processors)) != null) {
if(null == tsvReaderBrandDTO.getPage_cache()){
last = 0;
}
else{
last = tsvReaderBrandDTO.getPage_cache().length();
}
System.out.println(String.format("lineNo=%s, rowNo=%s, customer=%s , last but one cell length=%s", beanReader.getLineNumber(),
beanReader.getRowNumber(), tsvReaderBrandDTO.getUnique_ID(), last));
i++;
}
System.out.println("Number of rows : "+i);
}
finally {
if(beanReader != null) {
beanReader.close();
}
}
}
private static CellProcessor[] getProcessors() {
final CellProcessor[] processors = new CellProcessor[] {
new Optional(), new NotNull(), new NotNull(), new NotNull(), new NotNull(),
new NotNull(), new NotNull(), new NotNull(), new NotNull(), new NotNull(),
new NotNull(), new NotNull(), new NotNull(), new NotNull(), new NotNull(),
new NotNull(), new NotNull(), new NotNull(), new NotNull(), new NotNull(),
new NotNull(), new NotNull(), new NotNull(), new NotNull(), new NotNull(),
new NotNull(), new NotNull(), new NotNull(), new NotNull(), new NotNull(),
new NotNull(), new NotNull(), new NotNull(), new NotNull(), new NotNull(),
new NotNull(), new NotNull(), new NotNull(), new Optional()};
return processors;
}
}
은 알려 주시기 바랍니다 나는 http://supercsv.sourceforge.net/examples_reading.html를 확인했습니다. CSV 파일 예 : 및 출력. 파서가 데이터 레코드가 두 개의 물리적 라인에 걸쳐 있다고 생각하도록 라인에 도피되지 않은 "
(이중 어포 스트로피) 문자가 포함될 수 있습니까?
당신이 인용 문자로 이중 아포스트로피 문자를 사용하지 않는 경우, 당신은 CsvPreference을 변경할 수 있습니다 - http://supercsv.sourceforge.net/apidocs/org/supercsv/prefs/CsvPreference.html를 참조 - 따옴표는 따옴표로 간주되지 않도록 : 물론
CsvPreference MY_PREFERENCES = new CsvPreference.Builder(
SOME_NEVER_USED_CHARACTER, ',', "\r\n").build();
이 같은 탭으로 구분 된 CSV 사용 무언가 :
CsvPreference MY_PREFERENCES = new CsvPreference.Builder(
SOME_NEVER_USED_CHARACTER, '\t', "\r\n").build();
는 빌더의 서명에 대한 CsvPreference
의 javadoc을 참조하고 그에 따라 실제 값을 수정.
당신은 맞습니다. 이스케이프 처리되지 않은 "... 당신은 런타임 중에 그것을 처리 할 수있는 방법을 제안 할 수 있습니까? –
나는 두려워합니다 : - 생성하는 응용 프로그램의 측면에서 처리하십시오 - 입력 파일을 "전처리 프로그램"을 통해 전달합니다 - 코드를 읽고 두 번 아포스트로피를 두 번 어포 스트로피로 바꾸는 코드입니다. 아마도 라이브러리가 그러한 옵션을 제공 할 수 있습니다. 그렇지 않으면 원본 파일이 아닙니다. 유효한 CSV/TSV Btw, 귀하의 질문에 대답하고 도피되지 않은 이중 어포 스트로피의 존재가 문제의 근본 원인이라면 대답으로 답변을 표시해 주시겠습니까? :) 감사. –
내가 가지고있는 데이터 파일은 불일치와 문제의 이러한 종류가있을 수 있습니다 데이터 크기가 거대하고 단일 파일에 최대 100 기가 바이트 데이터를 갈 수 있습니다 ... 그래서 메모리가 부족하게 될 것이고 내가 할 수 없어 읽는 동안 이것을 처리 할 방법을 찾으려면 –