8年后我回到Java了。
我有一个文件上传HTML页面:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
从我上传CSV文件。
/upload
映射到实现doPost
方法的servlet:
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(req);
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
InputStream stream = item.openStream();
if (!item.isFormField()) {
int len;
byte[] buffer = new byte[8192];
while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
// do some deserialization here..?
}
}
}
我真的希望有一种比手动解析方法更好的方法。我正在阅读Serializable
界面 - 这是我可以使用的吗?
感谢。
答案 0 :(得分:2)
我希望您已经根据代码查看了user guide for commons fileupload。
您可以轻松地将来自commons fileupload的输入流传递到CSV库(例如Super CSV),而不是编写自己的流读取代码。您甚至可以将CSV读作POJO(即Javabean)。看看examples。
您的代码只会与您从InputStream而不是File中读取的示例不同,因此创建阅读器将类似于:
ICsvBeanReader beanReader = new CsvBeanReader(
new InputStreamReader(stream), CsvPreference.STANDARD_PREFERENCE);
如果您实际上不想阅读CSV文件(例如,您可能希望保留它或通过电子邮件发送),那么您可以使用Commons IO的IOUtils将其读入字节数组。< / p>
byte[] bytes = IOUtils.toByteArray(stream);
哦,欢迎回到Java:)
答案 1 :(得分:1)
有CSVReader库。
Serializable
接口用于将对象的状态存储到字节流。可以把它想象成将一个游戏保存到一个保存文件(如果你升级你的版本然后尝试重新加载旧的保存,那么会有类似的代表)。