【问题标题】:ftp csv file download with java用java下载ftp csv文件
【发布时间】:2014-05-26 23:33:52
【问题描述】:

我使用以下代码成功下载了存储在 ftp 服务器中的 csv 文件。

URL url = new URL(ftpUrl); 
URLConnection conn = url.openConnection();

InputStream inputStream = conn.getInputStream();
long filesize = conn.getContentLength();
byte[] buffer = new byte[4096];
int bytesRead = -1;

while ((bytesRead = inputStream.read(buffer)) != -1) {
    String str = new String(buffer, "UTF-8");
    out.println(str);
} 

csv 文件有 1276KB 文件大小和大约 20.000 行。问题是生成的 csv 文件有一些空白或缺少信息的行。损坏的行大约每 100 条记录发生一次。我试图通过增加缓冲区大小来修复,但损坏的行仍然存在。 任何帮助将不胜感激:)

【问题讨论】:

    标签: java file csv ftp download


    【解决方案1】:

    当然!你必须知道字符串有多长:除非文件大小是 4096 的倍数,否则你总是会在 buffer 中获得旧项目

    您必须改用此语法

    String str = new String(buffer, 0, bytesRead, "utf-8");
    

    【讨论】:

    • 我使用了上述建议,但我仍然得到损坏的行(文件是 4096 的倍数)。然后,我将缓冲区大小设置为文件大小,问题就解决了。我不知道是否是一个有效的解决方案。感谢您的回答!
    • 将整个文件放入内存肯定不是一个好的解决方案。您在问题中的代码中从上一次迭代中填充的字节有问题。我给了你一种跳过文件边界的最后一个字节的方法(例如,如果 readBytes 给你 6 个字节并且文件结束,你会发现你自己有 4090 个字节来自上一次读取)......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多