我想使用FTP下载文件,然后将文件保存在内存中,只需循环遍历这些行。
到目前为止,我正在下载这样的文件:
ByteArrayOutputStream bos = new ByteArrayOutputStream()
ftp.retrieveFile("inventory.csv", bos)
我不知道如何从ByteArrayOutputStream转到能够循环每一行。
答案 0 :(得分:1)
这是我想到的想法,除了轻微的忽视,它应该对你有帮助:
ByteArrayOutputStream bos;
BufferedReader bufferedReader;
FTPClient ftp;
String line;
ArrayList<String[]> values;
try{
bos = new ByteArrayOutputStream();
ftp = new FTPClient();
if (ftp.retrieveFile("inventory.csv", bos)){
values = new ArrayList<>();
bufferedReader = new BufferedReader(new StringReader(new String(bos.toByteArray())));
while ((line = bufferedReader.readLine()) != null){
values.add(line.split(","));
}
// Then you could switch ArrayList<String[]> for just String[]
}
}
catch(Exception x){
}
finally{
if (bufferedReader != null)
bufferedReader.close();
if (bos != null)
bos.close();
}
答案 1 :(得分:0)
您可以使用retrieveFileStream()
代替,然后使用BufferedReader
在try-with-resources块中逐行阅读。
try (BufferedReader reader =
new BufferedReader(
new InputStreamReader(ftp.retrieveFileStream("inventory.csv"),
StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
// do something with line
}
} catch (IOException e) {
// handle error
}
代码假定文件以UTF-8编码。如果使用不同的编码,请务必相应地替换StandardCharsets.UTF_8
。
优于中间ByteArrayOutputStream
的优势在于,您的程序在任何时候都不需要在内存中拥有整个文件内容的副本。