【问题标题】:Getting a part of a txt-file from the internet in android java在android java中从互联网上获取txt文件的一部分
【发布时间】:2012-05-20 17:40:35
【问题描述】:

我正在开发一个从固定网页获取信息并将信息转换为图表的应用程序。我试图接收的网页是一个 txt 文件。问题是txt文件太大,在java中将文件变成String需要一分钟多的时间。我为此使用的代码如下:

HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://winterberg.dnsalias.net:9000/log.txt");
ResponseHandler<String> handler = new BasicResponseHandler();
response = client.execute(httpGet, handler);

txt 文件表示房屋内的温度历史记录。自 2011 年 8 月 11 日以来,每小时都会自动将一行文本添加到文本文件中,因此它包含超过 6000 行。但是,只有上个月的信息与申请相关。有没有办法从文件末尾开始读取,直到它读取了一定数量的行?

或者有没有其他方法可以加快读取文件的速度?

我无法更改文本文件。

【问题讨论】:

    标签: java android html get text-files


    【解决方案1】:

    您可以完全读取您的文本文件并保存读取的字节数。因此,在下一次调用中,您可以读取从存储它的数字开始的字节范围,并在下载此特定字节后,将其附加到原始文本文件中。并且您拥有使用新行更新的文本文件。

    您可以使用以下代码部分来获取字节范围:

    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpGet get = new HttpGet(new URI(...));
    get.addHeader("Range", "bytes=" + start + "-");
    InputStream in = httpClient.execute(get).getEntity().getContent();
    

    对于追加文件,您可以使用追加模式打开文件,并在其上写入新字节:

    FileOutputStream fos = new FileOutputStream("file.txt", true); //true means openning file in append mode
    
    byte[] buffer = new byte[1024];
    int nread = -1;
    while((nread != in.read(buffer, 0, 1024))
        fos.write(buffer, 0, nread);
    
    in.close();
    fos.close();
    

    希望对你有用:)

    【讨论】:

    • 在第一次运行时,你应该得到你的文本文件的所有部分,所以,你应该将 start 设置为0
    • 如果你达到了你的问题答案,你应该接受正确的答案。
    【解决方案2】:

    解决这个问题的最简单方法是在服务器上使用一个非常简单的脚本来读取文件并打印最后 30 行。

    您也可以尝试使用范围 HTTP 标头,但许多服务器没有实现(您已经有了另一个答案的示例)。

    sample usage:  
    Range: bytes=500-999
    

    我认为脚本会是一个更好的选择。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 2012-07-08
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2013-04-19
      相关资源
      最近更新 更多