Java 逐行下载文件

Java 逐行下载文件,java,bufferedreader,inputstreamreader,Java,Bufferedreader,Inputstreamreader,我知道这个问题对你们大多数人来说可能听起来很基本。我需要从服务器下载一个大文件。此文件的第一行包含时间标记。只有当我的时间标签与文件的时间标签不匹配时,我才想下载整个文件。为此,我使用给定的代码。然而,我不确定这是否真的阻止了文件无用地下载整个文件 请帮帮我 public String downloadString(String url,String myTime) { try { URL url1 = new URL(url); URLCon

我知道这个问题对你们大多数人来说可能听起来很基本。我需要从服务器下载一个大文件。此文件的第一行包含时间标记。只有当我的时间标签与文件的时间标签不匹配时,我才想下载整个文件。为此,我使用给定的代码。然而,我不确定这是否真的阻止了文件无用地下载整个文件

请帮帮我

public String downloadString(String url,String myTime)
{
    try {
           URL url1 = new URL(url);
           URLConnection tc = url1.openConnection();
           tc.setConnectTimeout(timeout);
           tc.setReadTimeout(timeout);
           BufferedReader br = new BufferedReader(new InputStreamReader(tc.getInputStream()));
           StringBuilder sb = new StringBuilder();
           String line;
           while ((line = br.readLine()) != null) {

                    if(line.contains(myTime))
                    {
                        Log.d("TIME CHECK", "Article already updated");
                        break;
                    }
                    sb.append(line+"\n");
                }
                br.close();
                return sb.toString();
        }
    catch(Exception e)
    {
        Log.d("Error","In JSON downloading");
    }

    return null;
}

不,没有简单的方法可以精确地控制下载内容的最后一个字节。即使在Java级别,您也需要一个
BufferedReader
,它显然会下载比您要求的更多的内容,对其进行缓冲。还有其他缓冲区,包括操作系统级别的缓冲区,您无法控制。使用HTTP只下载新文件的正确方法是使用
IfModifiedSince
头。

如果大小合适,可以逐字节或逐块下载

BufferedInputStream in = new BufferedInputStream(url).openStream())
byte data[] = new byte[1024];
int count;
while((count = in.read(data,0,1024)) != -1)
{
    out.write(data, 0, count);
}
请勾选这个问题


您的代码不会下载整个文件,但由于
BufferedReader
的默认缓冲区大小为8192,您将至少读取那么多字符。

很抱歉,它实际上不是一个文件。它相当于一个包含json的网页。现在我们可以逐行阅读而不是完全下载吗?