Q:

Узнать размер файла в Интернете

Искал по английской версии этого сайта и нашел разные методы в основном такие: 
public long getFileSize(String string) throws IOException {
        URL url = new URL(string);
        URLConnection urlConnection = url.openConnection();
        urlConnection.connect();
        return urlConnection.getContentLength();
    }

Но он не работает, приложение закрывается при действии этого кода.
Ошибка
Caused by: android.os.NetworkOnMainThreadException

Код вызывал в onCreatе, чтобы проверить функцию
Может что то не так делаю? Или есть другой проверенный способ, для моей цели.
Мне нужно сравнить файл, который уже скачан с тем, что в интернете и если размеры не совпадают, то скачиваю новый файл с Интернета.

A:

Метод, который привели вы, основан на чтении HTTP-заголовков. Конкретно этого заголовка:
Content-Length: N

Прочитав заголовки, можно отбросить сами данные, сократив таким образом время получения размера ответа в байтах. Это наилучший способ определения "размера файла".
Другое дело, что не сервер может быть настроен и таким образом, что этот заголовок не будет включаться в тело ответа сервера, и определить размер файла не удастся таким образом.
Ваша же задача может решиться еще проще, если вы будете использовать концепцию хэш-сумм. - Если есть такая возможность, используйте именно ее - ведь скачать 32 байта(средний размер хэша) будет куда менее проблематично, чем проверять размер файла. К слову, размер может оставаться одинаковым при расхождении некоторых значений байт, а это значит, что способ проверки целостности по размеру провалится, в то время как хэш-функция отразит любые изменения.
Небольшой оффтоп:
Ваш exception вызван тем, что Google надоело слышать, что "Android тормозит". Ведь сама система спроектирована так, что тормозов в ней нет. Никаких. Проблема в том, что неопытные разработчики пренебрегают многими возможностями, что приводит к появлению в GP плохих приложений, вызывающих впечатление, что "Android тормозит".
Вы как раз пренебрегли одной из таких - использованием многопоточности. Операция обращения к сетевым ресурсам - априори длительная: установить TCP рукопожатие тремя пакетами, а потом еще и массив данных передать. Поэтому в UI-потоке ее выполнять заведомо запрещено.

