Java получить размер файла
Сегодня, при написании кода, вам необходимо реализовать функцию получения размера файла. В настоящее время есть два метода реализации. Одним из них является использование метода File's Length (); Другой - использовать метод доступного FileInputStream (). Когда inputstream не выполняет работу чтения, размер offect () должен быть равен размеру файла. Но при работе с большими файлами проблемы возникают в последнем. Посмотрим:
В примере я использовал файл изображения установки CentOS 6.5, в основном учитывая, что этот файл достаточно большой (большой, чем 2 ГБ).
1. Используйте метод длины файла ()
public static void main (string [] args) {file f = new File ("d: //centos-6.5-x86_64-bin-dvd1.iso"); if (f.exists () && f.isfile ()) {logger.info (f.length ()); } else {logger.info ("файл не существует или не является файлом"); }}Давайте посмотрим на вывод:
4467982336
Результатом является 4,16 ГБ, что согласуется с результатами, отображаемыми в Windows.
Далее, давайте посмотрим на размер файла, полученный через FileInputStream:
public static void main (string [] args) {fileInputStream fis = null; try {file f = new File ("d: //centos-6.5-x86_64-bin-dvd1.iso"); fis = new FileInputStream (f); logger.info (fis.Avialable ()); } catch (Exception e) {logger.error (e); } наконец {if (null! = fis) {try {fis.close (); } catch (ioException e) {logger.error (e); }}}}}Вот результаты работы:
2147483647
Этот результат выглядит знакомым? Это integer.max_value, которое является максимальным значением, которое может представлять подписанное целое число.
Итак, если вы конвертируете его в знакомый блок, насколько велик размер файла, полученный таким образом?
Это около 2 ГБ, что, очевидно, не является правильным результатом.
Причина заключается в том, что тип, возвращаемый методом File Length (), является длинным, и максимальное значение положительного значения, которое может представлять длинный тип: 9223372036854775807. Максимальный размер файла, который может быть преобразован в максимальную поддержку: 8954730132868714 EB -пейты. Этот порядок будет использоваться в течение многих лет в истории развития ИТ человека. Возвращаемое значение метода ViewInputStream () доступен () int. Максимальный диапазон представления был введен ранее. Максимальный размер файла, который можно поддерживать: 1,99 ГБ, и мы можем легко достичь этого порядка.
Добавлен 31 марта 2014 года:
Невозможно читать большие размеры файлов для методов потоковой передачи, но вы больше не можете использовать традиционный пакет под java.io.*. Здесь вам нужно использовать новый инструмент под Java.nio.* - FileChannel. Давайте посмотрим на следующий пример кода:
public static void main (string [] args) {fileChannel fc = null; try {file f = new File ("d: //centos-6.5-x86_64-bin-dvd1.iso"); if (f.exists () && f.isfile ()) {fileInputStream fis = new FileInputStream (f); fc = fis.getChannel (); logger.info (fc.size ()); } else {logger.info ("файл не существует или не является файлом"); }} catch (filenotfoundexception e) {logger.error (e); } catch (ioException e) {logger.error (e); } наконец {if (null! = fc)) {try {fc.close (); } catch (ioException e) {logger.error (e); }}}}}Результаты, полученные после использования FileChannel, согласуются с первым случаем, точно описывая точный размер файла.
Это также напоминает всем техническим коллегам, что при чтении больших файлов вы должны быть осторожны с данными Int-Type, чтобы избежать скрытых ошибок, и их трудно найти.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!