Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取http文件路径的文件大小_Java - Fatal编程技术网

Java 如何获取http文件路径的文件大小

Java 如何获取http文件路径的文件大小,java,Java,我使用下面的代码通过http从远程位置下载文件。某些资产未完全下载,并且似乎已损坏。看起来有5%的时间是这样。我想,通过提前获取文件大小并将其与我下载的文件进行比较,以确保没有遗漏任何内容,从而确保我下载了完整的文件 通过一些谷歌搜索和查看我已经在使用的对象,我看不到一个明显的方法来获得这个文件大小。有人能给我指出正确的方向吗 HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setInstanceFoll

我使用下面的代码通过http从远程位置下载文件。某些资产未完全下载,并且似乎已损坏。看起来有5%的时间是这样。我想,通过提前获取文件大小并将其与我下载的文件进行比较,以确保没有遗漏任何内容,从而确保我下载了完整的文件

通过一些谷歌搜索和查看我已经在使用的对象,我看不到一个明显的方法来获得这个文件大小。有人能给我指出正确的方向吗

HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setInstanceFollowRedirects(true);

InputStream is = con.getInputStream();
file = new File(destinationPath+"."+remoteFile.getExtension());

BufferedInputStream bis = new BufferedInputStream(is);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getAbsolutePath()));
while ((i = bis.read()) != -1) {
   bos.write(i);
}
bos.flush();
bis.close();
签出从URLConnection继承的getContentLength方法HttpURLConnection。

签出从URLConnection继承的getContentLength方法HttpURLConnection。

con.getContentLength可能会为您提供所需内容,但前提是服务器将其作为响应头提供。如果使用服务器而不是提供内容长度标头,则总长度在前端不可用。

con.getContentLength可能会提供您想要的内容,但前提是服务器将其作为响应标头提供。如果使用服务器而不是提供内容长度标头,则总长度在前端不可用。

您可以使用方法

它返回可从此输入流读取或跳过的字节数的估计值,而无需在下次调用此输入流的方法时阻塞

下一次调用可能是同一个线程或另一个线程。单个读取或跳过这么多字节不会阻塞,但可能读取或跳过更少的字节

FileInputStream fis = new FileInputStream(destinationPath+"."+remoteFile.getExtension());
System.out.println("Total file size to read (in bytes) : "+ fis.available());
你可以使用这个方法

它返回可从此输入流读取或跳过的字节数的估计值,而无需在下次调用此输入流的方法时阻塞

下一次调用可能是同一个线程或另一个线程。单个读取或跳过这么多字节不会阻塞,但可能读取或跳过更少的字节

FileInputStream fis = new FileInputStream(destinationPath+"."+remoteFile.getExtension());
System.out.println("Total file size to read (in bytes) : "+ fis.available());

它应该在http传输的内容长度头中指定。但这取决于您查询的web服务器。无论如何,不确定如何在java中检索头。它可以通过Content-Length头获得,目标服务器可以设置连接,也可以不设置连接。GetHeaderFieldEdit应该在http传输的Content-Length头中指定。但这取决于您查询的web服务器。无论如何,不确定如何在java中检索头。它可以通过Content Length头获得,目标服务器可以设置连接,也可以不设置连接。getHeaderFieldQuoted来自链接到的javadoc:注意,虽然InputStream的某些实现将返回流中的总字节数,但许多实现不会返回。使用此方法的返回值分配用于保存此流中所有数据的缓冲区是不正确的。-它为您提供了一个无需阻塞即可读取的保证最小字节数(可能为零),而不一定是流能够提供给您的总字节数。引用您链接到的javadoc:请注意,虽然InputStream的某些实现将返回流中的总字节数,许多人不会。使用此方法的返回值分配用于保存此流中所有数据的缓冲区是不正确的。-它为您提供了一个保证的最小字节数,您可以在不阻塞的情况下读取该字节数,该字节数可能为零,而不一定是流能够提供给您的总字节数。