public Collection<String> getLines(String path) throws SftpException
{
BufferedReader reader = null;
try
{
reader = new BufferedReader(new InputStreamReader(get(path)));
Collection<String> result = new ArrayList<String>();
String line;
while((line = reader.readLine()) != null)
{
result.add(line);
}
return result;
}
catch (IOException e)
{
throw new SftpException("Could not get lines from '"+path+"'.", e);
}
finally
{
if(reader != null)
try
{
reader.close();
}
catch (IOException e)
{
throw new SftpException("Failed to close stream", e);
}
}
}
我使用上面的方法获取位于SFTP服务器上的文件中的所有行。 get(path)
方法将文件内容作为InputStream
返回。在我的特定情况下,该文件是具有多个分组订单的CSV。要检查某行是订单还是新组的标题,我会line.startsWith("HDR")
。
我的问题是我突然发现我的代码跳过了第一个标题行。当我进入调试器时,我发现我的集合中的第一行实际上在HDR
部分之前有一些奇怪的字符。我怀疑它是UTF-8 BOM或类似的东西。那么,我该如何处理呢?如何正确读取UTF-8文件?有没有办法可以检查它是否真的是UTF-8文件?
更新:在Byte order mark screws up file reading in Java找到解决方案,关闭此内容:)