我有一个具有文件上传功能的 Spring MVC 应用程序。文件作为 MultipartFile 传递给控制器,从中很容易获得 InputStream。我正在上传包含 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();
}
必须有一种更好的方法可以实际工作。