草庐IT

android - 将大文本文件读入 Textview

coder 2023-11-30 原文

我想从 SD 卡中读取大文件到 TextView 中。 我有想法,但我不知道如何申请。

我觉得这个东西需要用到: 处理程序和 线程

但是我不知道怎么申请。 任何人都可以提供一些示例或教程。

更新:

Thread test=new Thread()
    {
        public void run()
        {
    File sfile=new File(extras.getString("sfile"));
    try {
        StringBuilder text = new StringBuilder();
        BufferedReader br = new BufferedReader(new FileReader(sfile));
        String line1;
        while(null!=(line1=br.readLine()))
        {
            text.append(line1);
            text.append("\n");
        }
        subtitletv.setText(text.toString());

    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
        }
    };
    test.start();

这是我的代码。但它比以前的代码更好, 但它无法读取 2MB 的文件。 如何解决这个问题? 以及如何设置Progress?

最佳答案

这是一个如何做到这一点的例子。如果文件太大,读取时间超过 5 秒,那么它应该只是一个 AsyncTask。 .

// first open the file and read it into a StringBuilder
String cardPath = Environment.getExternalStorageDirectory();
BufferedReader r = new BufferedReader(new FileReader(cardPath + "/filename.txt"));
StringBuilder total = new StringBuilder();
String line;
while((line = r.readLine()) != null) {
    total.append(line);
}
r.close();

// then get the TextView and set its text
TextView txtView = (TextView)findViewById(R.id.txt_view_id);
txtView.setText(total.toString());

编辑

您只能在 UI 线程中更改 UI 元素。 documentation on threads有更多细节。当您尝试从另一个线程执行此操作时,您会得到这个(从您的 pastebin):

E/AndroidRuntime( 8517): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

我认为最简单的解决方案是使用 AsyncTask ,正如我之前推荐的那样。您只需将您的工作代码放在一个函数 (doInBackground()) 中,将您的 UI 代码放在另一个函数 (onPostExecute()) 中,然后 AsyncTask确保他们在正确的线程上按顺序被调用。我链接到的文档有加载位图的示例,这与加载文本几乎相同。

关于android - 将大文本文件读入 Textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579603/

有关android - 将大文本文件读入 Textview的更多相关文章

  1. ruby - 如何使用 Ruby 将 CSV 文件读入 HTML 表格? - 2

    我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda

  2. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  3. ruby-on-rails - HTTParty 的内存问题和下载大文件 - 2

    这会导致Ruby出现内存问题吗?我知道如果大小超过10KB,Open-URI会写入TempFile。但是HTTParty会在写入TempFile之前尝试将整个PDF保存到内存吗?src=Tempfile.new("file.pdf")src.binmodesrc.writeHTTParty.get("large_file.pdf").parsed_response 最佳答案 您可以使用Net::HTTP。参见thedocumentation(特别是标题为“流媒体响应机构”的部分)。这是文档中的示例:uri=URI('http://e

  4. ruby - 尝试比较两个文本文件,并根据信息创建第三个 - 2

    我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende

  5. ruby - 在 Ruby 中搜索大文件的更简单方法? - 2

    我正在编写一个简单的日志嗅探器,它将在日志中搜索表明我支持的软件存在问题的特定错误。它允许用户指定日志路径并指定他们想要搜索多少天前。如果用户关闭日志滚动,日志文件有时会变得非常大。目前我正在做以下事情(虽然还没有完成):File.open(@log_file,"r")do|file_handle|file_handle.eachdo|line|ifline.match(/\d+++-\d+-\d+/)etc...line.match显然会查找我们在日志中使用的日期格式,其余逻辑将在下面。但是,有没有更好的方法来搜索没有.each_line的文件?如果没有,我完全同意。我只是想确保我使

  6. ruby - 如何将文本文件读入数组数组(每个子数组都是文本文件中的一行?) - 2

    所以我在Ruby方面几乎是个新手,我整理了一个代码来解决MinCut问题(对于一个作业,是的——我整理并测试了那部分代码),并且我无法弄清楚如何读取文件并将其放入数组数组中。我有一个文本文件要阅读,其中包含不同长度的列,如下所示137791642123134348123134109我想将它读入一个二维数组,其中每一行和每一列都被拆分,每一行都进入一个数组。因此,上述示例的结果数组将是:[[1,37,79,164],[2,123,134],[3,48,123,134,109]]我读取文本文件的代码如下:defread_array(file,count)int_array=[]File.f

  7. 从文本文件中提取 Ruby 数据 - 2

    我有一个相对较大的文本文件,其中包含如下分层的数据block:ANALYSISOFXSIGNAL,CASE:1TUNEX=0.2561890123390808LineFrequencyAmplitudePhaseErrormxmymsp10.2561890123391E+000.204316425208E-010.164145385871E+030.00000000000E+00100020.2562865535359E+000.288712798671E-01-.161563284233E+030.97541196785E-041000(它们包含更多行然后重复)我想先提取TUNEX=

  8. ruby - 删除文本文件中的特定行? - 2

    如何从文本文件中删除单个特定行?例如第三行,或任何其他行。我试过这个:line=2file=File.open(filename,'r+')file.each{last_line=file.posunlessfile.eof?}file.seek(last_line,IO::SEEK_SET)file.close不幸的是,它什么都不做。我尝试了很多其他解决方案,但没有任何效果。 最佳答案 我认为由于文件系统的限制,您不能安全地这样做。如果你真的想做一个就地编辑,你可以尝试将它写入内存,编辑它,然后替换旧文件。但请注意,这种方法至少存

  9. ruby - 如何在 Ruby 中处理大文件? - 2

    我对编程还很陌生,所以请多多关照。我正在尝试从图书馆数据库.dat文件中提取IBSN编号。我编写了有效的代码,但它只搜索了180MB文件的大约一半。如何调整它以搜索整个文件?或者我如何编写一个程序将dat文件拆分成可管理的block?编辑:这是我的代码:export=File.new("resultsfinal.txt","w+")File.open("bibrec2.dat").eachdo|line|line.scan(/[a]{1}[1234567890xX]{10}\W/)do|x|export.putsxendline.scan(/[a]{1}[1234567890xX]{1

  10. ruby - 如何在 Ruby 中有效地解析大文本文件 - 2

    我正在编写一个导入脚本来处理一个可能有数十万行的文件(日志文件)。使用一个非常简单的方法(如下)占用了足够的时间和内存,我觉得它随时都会耗尽我的MBP,所以我终止了这个过程。#...File.open(file,'r')do|f|f.each_linedo|line|#dostuffheretolineendend这个文件特别有642,868行:$wc-lnginx.log/code/src/myimport642868../nginx.log有谁知道处理此文件中每一行的更有效(内存/cpu)方法吗?更新上面f.each_line中的代码只是将正则表达式与该行进行匹配。如果匹配失败,我

随机推荐