0

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界面的信息 - 这是我可以使用的东西吗?

谢谢。

4

2 回答 2

2

我希望您已经根据您的代码查看了公共文件上传的用户指南。

您可以轻松地将来自 commons fileupload 的输入流传递到 CSV 库(例如Super CSV)中,而无需编写自己的流读取代码。您甚至可以将 CSV 读取为 POJO(即 Javabean)。看看例子

您的代码与示例的不同之处仅在于您从 InputStream 而不是文件中读取,因此创建阅读器将如下所示:

ICsvBeanReader beanReader = new CsvBeanReader(
    new InputStreamReader(stream), CsvPreference.STANDARD_PREFERENCE);

如果您实际上不想读取 CSV 文件(例如,您可能希望将其保存或通过电子邮件发送),那么您可以使用 Commons IO 的IOUtils将其读入字节数组。

byte[] bytes = IOUtils.toByteArray(stream);

哦,欢迎回到 Java :)

于 2012-11-26T05:42:01.517 回答
1

CSVReader库。

Serializable接口用于将对象的状态存储到字节流中。将其视为将游戏保存到保存文件(如果您升级版本然后尝试重新加载旧保存,则会产生类似的影响)。

于 2012-11-26T05:22:14.193 回答