Java 如何从最后一行到第一行读取文本文件

Java 如何从最后一行到第一行读取文本文件,java,android,Java,Android,我需要这个以相反的顺序运行,以便这些行以与此相反的顺序显示。有没有快速翻转文本视图之类的东西的方法?谢谢你的帮助 try { // Create a URL for the desired page URL url = new URL("text.txt"); // Read all the text returned by the server BufferedReader MyBr = new BufferedReader(new InputStreamReader(url.openStr

我需要这个以相反的顺序运行,以便这些行以与此相反的顺序显示。有没有快速翻转文本视图之类的东西的方法?谢谢你的帮助

try {
// Create a URL for the desired page
URL url = new URL("text.txt");

// Read all the text returned by the server
BufferedReader MyBr = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
line = MyBr.readLine();
TextView textview1 = (TextView) findViewById(R.id.textView1);

StringBuilder total = new StringBuilder();

while ((line = MyBr.readLine()) != null) {
total.append(line + "\r\n");}

textview1.setText(total);
Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/wonderfull.ttf");
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setTypeface(tf);
MyBr.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}

由于要在代码中更改UI,因此必须在UI线程上运行此操作。当然,您知道在UI线程上执行这样的I/O是不可能的,并且可以轻松创建ANR。所以我们假设这是伪代码。你最好的办法是在阅读流时将事情颠倒过来。例如,您可以。

您也可以直接将以下内容插入到可编辑文件中:

Editable e = textview1.getEditableText();
while ((line = MyBr.readLine()) != null) {
    e.insert(0, line + "\r\n");
}

您可以使用这个类:java.io.RandomAccessFile,

我会将该文件读入数组或数组列表,然后使用for循环将其从最后一个索引打印到第一个索引。

我是个十足的noob。不知道UI线程是什么,我也不怕ANRs,但是你的建议让我克服了我的问题。谢谢活动中的代码(及其调用的任何代码)在应用程序的主/UI线程上执行。如果你做了一些需要很长时间(>100ms)的事情,那么你的应用程序在用户看来会暂停和冻结。如果他们试图滚动或点击按钮,应用程序将不会响应。用户不喜欢这样。如果您将UI线程绑定超过5秒,Android操作系统将向用户显示一个对话框,说明“Foo应用程序没有响应”。那是一个ANR。它将为用户提供终止应用程序的选项。您不希望发生这种情况。因此,生成一个新线程来执行长任务,如从网络读取文件。您可以使用一个好的'ol java.lang.Thread,也可以使用Android Goods,比如Android.os.AsyncTask。请阅读SDK文档中的这些类。如果我的回答有帮助,请接受。