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的网页。现在我们可以逐行阅读而不是完全下载吗?