2016-05-31 3 views
0

byte[]의 파일을 쉼표로 구분하여 따옴표로 묶어서 OpenCSV를 사용하여 CSV로 저장하려고합니다. CSV 형식으로 저장하려면 using this입니다. 다음바이트에서 CSV 파일 쓰기

파일

byte[] bytes = myByteStream.getFile(); 

String decoded = new String(bytes, "UTF-8");    
//String lines[] = decoded.split("\\r?\\n"); 


FileOutputStream fos = new FileOutputStream("/home/myPC/Desktop/test.csv"); 
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); 
CSVWriter writer = new CSVWriter(osw); 
String[] row = {decoded}; 

writer.writeNext(row); 
writer.close(); 
osw.close(); 

에서 [] 배열에 바이트를 변환 한 다음 저장 내 코드입니다하지만 위의 코드는 한 줄에 모든 라인 주위에 여분의 따옴표를두고도 병합합니다.

제대로하는 방법에 대한 도움이 필요하십니까?

+0

를위한 JavaDoc에서 (풍경 CSV 여기에 사용)

CSVParser parser = CSVFormat.newFormat(',').parse( new InputStreamReader(new ByteArrayInputStream(bytes), "UTF8")); CSVPrinter printer = CSVFormat.newFormat(',').print(out); for (CSVRecord record : parser) { try { printer.printRecord(record); } catch (Exception e) { throw new RuntimeException("Error at line " + parser.getCurrentLineNumber(), e); } } parser.close(); printer.close(); 

봐 같은 뭔가가 필요 줄 바꿈에 의해 쪼개졌다? – uniknow

답변

1

넌 예 CSVWriter 생성자 내의 셀의 값에 인용 추가 방지 할 수있다 : 전체 바이트 배열에 관해서는

CSVWriter writer = new CSVWriter(osw, CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER); 

일렬로 유지. 원래 파일에 개행 문자가 있는지 확인하십시오. 다음 멀리 수행하여 얻을 수 있도록

는 경우 splitting a byte array on a particular byte

0

에서있어

BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "ASCII")); 

String line; 
while ((line = reader.readLine()) != null) { 
    // Handle the line, ideally in a separate method 
} 

이 나는 ​​Apache Commons CSV 더 나은 CSV 라이브러리라고 생각합니다. 붙여 넣은 코드에서 파일의 내용을 변경하거나 복제하려는 경우 명확하지 않습니다. 후자의 경우 파일을 CSV 레코드로 구문 분석 할 필요가 없습니다. 단지 바이트 단위로 복사하십시오 . 당신이 파일의 내용을 수정해야하는 경우 전자의 경우, 즉, 당신은 바이트 배열 내에서 행이 있습니까 CSVFormat