파일 업로드 기능이있는 Spring MVC 애플리케이션이 있습니다. 파일은 InputStream을 쉽게 얻을 수있는 MultipartFile로 컨트롤러에 전달됩니다. CSV가 포함 된 zip 파일을 업로드하고 있으며 CSV를 열고 한 번에 한 줄씩 읽을 수있는 방법을 찾으려고 애 쓰고 있습니다. 고정 크기 버퍼로 읽는 방법에 대한 많은 예제가 있습니다. 나는이 시도했지만, 버퍼 아주 잘 연결하여하지 않고 곧 동기화 얻고 메모리를 많이 사용zip 파일의 CSV를 한 번에 한 줄씩 읽음
이 ZipEntry entry = input.getNextEntry();
while(entry != null)
{
if (entry.getName().matches("Data/CSV/[a-z]{0,1}[a-z]{0,1}.csv"))
{
final String fullPath = entry.getName();
final String filename = fullPath.substring(fullPath.lastIndexOf('/') + 1);
visitor.startFile(filename);
final StringBuilder fileContent = new StringBuilder();
final byte[] buffer = new byte[1024];
while (input.read(buffer) > 0)
fileContent.append(new String(buffer));
final String[] lines = fileContent.toString().split("\n");
for(String line : lines)
{
final String[] columns = line.split(",");
final String postcode = columns[0].replace(" ", "").replace("\"", "");
if (columns.length > 3)
visitor.location(postcode, "", "");
}
visitor.endFile();
}
entry = input.getNextEntry();
}
실제로 작동하는 더 나은 방법이 있어야합니다.
:
귀하의 케이스를 들어는 당신이 필요로하는 모든은 버퍼 리더에 압축 파일 스트림을 포장하고 독자를 패스 CSVReader을 작성하고 그것을 사용하는 것입니다 Jackson CsvMapper는 입력 스트림을 한 번에 한 줄씩 Object []로 파싱합니다. 좀 봐봐. 그것은 split (",")보다 빠르며 빠져 나올 수 있습니다. – tom