我有问题从url读取最后n行。怎么做 ?我有url.openstream但是没有RandomAccessFile的contrsuctor,它有流的输入。有人能帮助我吗? meybe有没有这个库。 (我知道如何在我有文件的情况下使用RandomAccess实现,但是如何将流更改为文件)。
答案 0 :(得分:2)
BufferedReader
中,以便您可以逐行阅读。LinkedList
,您将保存这些行。n
”,请致电LinkedList#removeFirst()
。n
”行。例如(未经测试,仅用于演示):
BufferedReader in = new BufferedReader(url.openStream());
LinkedList<String> lines = new LinkedList<String>();
String line = null;
while ((line = in.readLine()) != null) {
lines.add(line);
if (lines.size() > nLines) {
lines.removeFirst();
}
}
// Now "lines" has the last "n" lines of the stream.
答案 1 :(得分:2)
对不起。你将不得不自己做这个。但不要担心,因为它非常简单。
您只需跟踪自n
开始阅读以来遇到的最后UrlStream
行。我建议使用Queue
吗?
基本上你可以做类似
的事情public String[] readLastNLines(final URL url, final int n) throws IOException{
final Queue<String> q = new LinkedList<String>();
final BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
String line=null;
while ((line = br.readLine())!=null)
{
q.add(line);
if (q.size()>n) q.remove();
}
return q.toArray(new String[q.size()]);
}
readLastNLines
返回一个数组,其中包含从n
读取的最后url
行。
不幸的是,您不能将RandomAccessFile
与来自互联网的流一起使用,因为根据定义,流不是随机访问。