обычно вы можете использовать getContentLength , но лучше всего - получить длину самостоятельно (поскольку она может обойти максимальное значение целого числа).
просто проанализируйте значение заголовка content-length самостоятельно. лучше разбери как долго.
пример:
final URL uri=new URL(...);
URLConnection ucon;
try
{
ucon=uri.openConnection();
ucon.connect();
final String contentLengthStr=ucon.getHeaderField("content-length");
//...
}
catch(final IOException e1)
{
}
обратите внимание, что я могу быть любой строкой, поэтому используйте try catch, и если она равна -1, пуста или равна нулю, это означает, что вы не можете знать размер файла, так как сервер этого не разрешает.
РЕДАКТИРОВАТЬ: Вот более обновленный код, используя Kotlin:
@JvmStatic
@WorkerThread
fun getFileSizeOfUrl(url: String): Long {
var urlConnection: URLConnection? = null
try {
val uri = URL(url)
urlConnection = uri.openConnection()
urlConnection!!.connect()
if (VERSION.SDK_INT >= Build.VERSION_CODES.N)
return urlConnection.contentLengthLong
val contentLengthStr = urlConnection.getHeaderField("content-length")
return if (contentLengthStr.isNullOrEmpty()) -1 else contentLengthStr.toLong()
} catch (ignored: Exception) {
} finally {
if (urlConnection is HttpURLConnection)
urlConnection.disconnect()
}
return -1
}