用java下载ftp csv文件

用java下载ftp csv文件,java,file,csv,ftp,download,Java,File,Csv,Ftp,Download,我使用下面的代码成功下载了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

我使用下面的代码成功下载了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条记录发生一次。我试图通过增加缓冲区大小来修复,但损坏的行仍然存在。
任何帮助都将受到感激:)

当然!您必须知道字符串的长度:除非文件大小是4096的倍数,否则在
buffer

您必须改用此语法

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

我使用了上面的建议,但仍然得到了损坏的行(该文件是4096的倍数)。然后,我将缓冲区大小设置为文件大小,问题就解决了。我不知道这是否是一个有效的解决方案。谢谢你的回答!将整个文件放在内存中肯定不是一个好的解决方案。在问题代码中,上一次迭代中填充的字节有问题。我给了你一种跳过的方法,最后超出文件边界的字节(例如,如果readBytes给了你6个字节,文件结束了,你会发现你自己有4090个字节来自上一次读取)。。。