Как узнать размер файла java android

Java получить размер файла

Java getfilesize, размер файла java, получить размер файла в java, метод длины файла java, размер канала файла, размер файла, размер файла байт, мегабайт, ГБ.

Автор: Pankaj Kumar
Дата записи

Сегодня мы рассмотрим различные способы определения размера файла в Java.

Java получить размер файла

Существуют различные классы, которые мы можем использовать для программы java get file size. Некоторые из них являются;

  1. Java получает размер файла с помощью Файла класса
  2. Получить размер файла в java с помощью FileChannel class
  3. Java получает размер файла с помощью Apache Commons IO Файлы класс

Прежде чем мы рассмотрим пример программы для определения размера файла, у нас есть образец pdf-файла размером 2969575 байт.

Java получает размер файла с помощью класса файла

Метод Java File length() возвращает размер файла в байтах. Возвращаемое значение не указано, если этот файл обозначает каталог. Поэтому, прежде чем вызывать этот метод для определения размера файла в java, убедитесь, что файл существует, а не является каталогом.

Ниже приведен простой пример программы java для получения размера файла с использованием класса File.

Получить размер файла в java с помощью класса FileChannel

Мы можем использовать метод FileChannel size() для получения размера файла в байтах.

Java получает размер файла с помощью класса FileUtils ввода-вывода Apache Commons

Если вы уже используете Apache Commons IO в своем проекте, вы можете использовать метод FileUtils sizeOf для получения размера файла на java.

Это все для программ java get с размером файла.

Источник

Получить размер папки или файла

Как я могу получить размер папки или файла на Java?

ОТВЕТЫ

Ответ 1

Это возвращает длину файла в байтах или 0 , если файл не существует. Нет никакого встроенного способа получить размер папки, вам придется рекурсивно пройти дерево каталогов (используя метод listFiles() файлового объекта, который представляет каталог), и скопируйте размер каталога для себя:

ПРЕДУПРЕЖДЕНИЕ. Этот метод недостаточно эффективен для использования в производстве. directory.listFiles() может возвращать null и вызывать NullPointerException . Кроме того, он не рассматривает символические ссылки и, возможно, имеет другие режимы отказа. Используйте этот метод.

Ответ 2

Используя java-7 nio api, вычисление размера папки может быть выполнено намного быстрее.

Вот пример, готовый к запуску, который является надежным и не будет генерировать исключение. Он будет регистрировать каталоги, в которые он не может войти или имел проблемы с перемещением. Символы игнорируются, и одновременная модификация каталога не вызовет больше проблем, чем необходимо.

Ответ 3

Обратите внимание, что вам нужно будет вручную проверить, является ли файл каталогом, поскольку метод генерирует исключение, если ему передается некаталог.

ПРЕДУПРЕЖДЕНИЕ. Этот метод (с точки зрения commons-io 2.4) имеет ошибку и может бросать IllegalArgumentException , если каталог изменяется одновременно.

Ответ 4

Было бы лучше использовать Files::size на шаге карты, но он выдает исключенное исключение.

UPDATE:
Вы также должны знать, что это может вызвать исключение, если некоторые из файлов/папок недоступны. Смотрите question и другое решение, используя Guava.

Читайте также:  Мейзу м6 ноут прошивка андроид 8

Ответ 5

Ответ 6

Для Java 8 это правильный способ:

Важно отфильтровать все каталоги, поскольку метод длины не гарантированно равен 0 для каталогов.

По крайней мере, этот код обеспечивает такую ​​же информацию о размере, что и сам проводник Windows.

Ответ 7

Если вы хотите использовать API Java 8 NIO, следующая программа будет печатать размер в байтах каталога, в котором он находится.

Метод calculateSize универсален для объектов Path , поэтому он также работает для файлов. Примечание, что если файл или каталог недоступны, в этом случае возвращаемый размер объекта пути будет 0 .

Ответ 8

Обратите внимание, что это не работает для каталогов или не гарантируется работа.

Для каталога, что вам нужно? Если это общий размер всех файлов под ним, вы можете рекурсивно ходить с детьми, используя File.list() и File.isDirectory() , и суммировать их размеры.

Ответ 9

Объект File имеет метод length :

Ответ 10

Здесь лучший способ получить общий размер файла (работает для каталога и некаталога):

Изменить: обратите внимание, что это, вероятно, займет много времени. Не запускайте его в потоке пользовательского интерфейса.

Кроме того, здесь (взято из fooobar.com/questions/17018/. ) это хороший способ получить удобочитаемую строку String из long return:

Ответ 11

  • Работает для Android и Java
  • Работает как для папок, так и для файлов
  • Проверяет нулевой указатель везде, где это необходимо
  • Игнорирует символическую ссылку aka shortcuts
  • Продукция готова!

Ответ 12

Ответ 13

После много исследований и изучения различных решений, предлагаемых здесь в StackOverflow. Наконец я решил написать собственное решение. Моя цель — иметь механизм без броска, потому что я не хочу сбой, если API не может получить размер папки. Этот метод не подходит для многопоточного сценария.

Прежде всего, я хочу проверить допустимые каталоги при обходе дерева файловой системы.

Во-вторых, я не хочу, чтобы мой рекурсивный вызов включался в символические ссылки (программные ссылки) и включал размер в общую совокупность.

Наконец, моя реализация на основе рекурсии позволяет получить размер указанной директории. Обратите внимание на нулевую проверку для dir.listFiles(). Согласно javadoc существует вероятность того, что этот метод может вернуть null.

Некоторые кремы на торте, API, чтобы получить размер списка Файлы (возможно, все файлы и папки под root).

Ответ 14

в linux, если вы хотите отсортировать каталоги, тогда du -hs * | sort -h

Ответ 15

для окон, использующих java.io, эта рекурсивная функция полезна.

Это проверено и работает правильно с моей стороны.

Источник

How to get the size of a file in MB (Megabytes)?

I have a zip file on a server.

How can I check if the file size is larger than 27 MB?

12 Answers 12

Use the length() method of the File class to return the size of the file in bytes.

You could combine the conversion into one step, but I’ve tried to fully illustrate the process.

Try following code:

Returns human readable file size from Bytes to Exabytes , rounding down to the boundary.

file.length() will return you the length in bytes, then you divide that by 1048576, and now you’ve got megabytes!

You can retrieve the length of the file with File#length(), which will return a value in bytes, so you need to divide this by 1024*1024 to get its value in mb.

Since Java 7 you can use java.nio.file.Files.size(Path p) .

Kotlin Extension Solution

Add these somewhere, then call if (myFile.sizeInMb > 27.0) or whichever you need:

If you’d like to make working with a String or Uri easier, try adding these:

If you’d like to easily display the values as a string, these are simple wrappers. Feel free to customize the default decimals displayed

Читайте также:  Как изменить название иконки андроид

You can use substring to get portio of String which is equal to 1 mb:

You can use FileChannel in Java .

FileChannel has the size() method to determine the size of the file.

Or you can determine the file size using Apache Commons ‘ FileUtils’ sizeOf() method. If you are using maven, add this to pom.xml file.

Try the following coding,

These methods will output the size in Bytes. So to get the MB size, you need to divide the file size from (1024*1024).

Now you can simply use the if-else conditions since the size is captured in MB.

Источник

Класс File

В отличие от большинства классов ввода/вывода, класс File работает не с потоками, а непосредственно с файлами. Данный класс позволяет получить информацию о файле: права доступа, время и дата создания, путь к каталогу. А также осуществлять навигацию по иерархиям подкаталогов.

Класс java.io.File может представлять имя определённого файла, а также имена группы файлов, находящихся в каталоге. Если класс представляет каталог, то его метод list() возвращает массив строк с именами всех файлов.

Для создания объектов класса File можно использовать один из следующих конструкторов.

  • File(File dir, String name) — указывается объекта класса File (каталог) и имя файла
  • File(String path) — указывается путь к файлу без указания имени файла
  • File(String dirPath, Sring name) — указывается путь к файлу и имя файла
  • File(URI uri) — указывается объекта URI, описывающий файл

Методы класса File

Класс File может использоваться для создания каталога или дерева каталогов. Также можно узнать свойства файлов (размер, дату последнего изменения, режим чтения/записи), определить к какому типу (файл или каталог) относится объект File, удалить файл. У класса очень много методов, перечислим некоторые.

  • getAbsolutePath() — абсолютный путь файла, начиная с корня системы. В Android корневым элементом является символ слеша (/)
  • canRead() — доступно для чтения
  • canWrite() — доступно для записи
  • exists() — файл существует или нет
  • getName() — возвращает имя файла
  • getParent() — возвращает имя родительского каталога
  • getPath() — путь
  • lastModified() — дата последнего изменения
  • isFile() — объект является файлом, а не каталогом
  • isDirectory — объект является каталогом
  • isAbsolute() — возвращает true, если файл имеет абсолютный путь
  • renameTo(File newPath) — переименовывает файл. В параметре указывается имя нового имени файла. Если переименование прошло неудачно, то возвращается false
  • delete() — удаляет файл. Также можно удалить пустой каталог

Каталог

Каталог — это объект класса File, который содержит список других файлов и каталогов. После создания объекта класса File, являющего каталогом, его метод isDirectory() вернёт значение true. И тогда вы можете вызывать метод list().

Для создания каталога можно использовать метод mkdir(), который вернёт true в успешном случае. Если указанный путь уже существует или каталог нельзя создать из-за отсутствия полного пути к нему, то вернётся false.

Метод mkdirs() создаёт сам каталог, так и всех его родителей.

Список каталогов

Если вы хотите получить содержимое каталога, то можно вызвать метод list() без аргументов. Вам вернётся полный список (массив) имён файлов и каталогов, содержащихся в данном каталоге. Есть ещё похожий метод listFiles(), который возвращает массив файлов (объектов, а не их имён), о котором поговорим отдельно.

Если вам нужен только список файлов с расширением .java, то можно использовать специальный фильтр-класс, который описывает критерии отбора объектов File с помощью интерфейса FilenameFilter.

Интерфейс FilenameFilter определяет единственный метод accept(), вызываемый по одному разу с каждым файлом в списке.

Метод возвращает true для файлов каталога, указанного в dir, которые должны быть включены в список, и false — для файлов, которые следует исключить.

Читайте также:  Adding language on android

Метод listFiles()

Метод имеет несколько перегруженных версий. Он возвращает список файлов в виде массива объектов класса File. Одна из версий метода также использует интерфейс FilenameFilter. Другая версия использует интерфейс FileFilter и возвращает те файлы, путевые имена которых соответствует интерфейсу.

Пример использования методов класса File показан в уроке Файловый менеджер и в других примерах.

Источник

Работа с файловой системой

Чтение и сохранение файлов

Работа с настройками уровня activity и приложения позволяет сохранить небольшие данные отдельных типов (string, int), но для работы с большими массивами данных, такими как графически файлы, файлы мультимедиа и т.д., нам придется обращаться к файловой системе.

ОС Android построена на основе Linux. Этот факт находит свое отражение в работе с файлами. Так, в путях к файлам в качестве разграничителя в Linux использует слеш «/», а не обратный слеш «\» (как в Windows). А все названия файлов и каталогов являются регистрозависимыми, то есть «data» это не то же самое, что и «Data».

Приложение Android сохраняет свои данные в каталоге /data/data/ / и, как правило, относительно этого каталога будет идти работа.

Для работы с файлами абстрактный класс android.content.Context определяет ряд методов:

boolean deleteFile (String name) : удаляет определенный файл

String[] fileList () : получает все файлы, которые содержатся в подкаталоге /files в каталоге приложения

File getCacheDir() : получает ссылку на подкаталог cache в каталоге приложения

File getDir(String dirName, int mode) : получает ссылку на подкаталог в каталоге приложения, если такого подкаталога нет, то он создается

File getExternalCacheDir() : получает ссылку на папку /cache внешней файловой системы устройства

File getExternalFilesDir(String type) : получает ссылку на каталог /files внешней файловой системы устройства

File getFileStreamPath(String filename) : возвращает абсолютный путь к файлу в файловой системе

FileInputStream openFileInput(String filename) : открывает файл для чтения

FileOutputStream openFileOutput (String name, int mode) : открывает файл для записи

Все файлы, которые создаются и редактируются в приложении, как правило, хранятся в подкаталоге /files в каталоге приложения.

Для непосредственного чтения и записи файлов применяются также стандартные классы Java из пакета java.io.

Итак, применим функционал чтения-записи файлов в приложении. Пусть у нас будет следующая примитивная разметка layout:

Поле EditText предназначено для ввода текста, а TextView — для вывода ранее сохраненного текста. Для сохранения и восстановления текста добавлены две кнопки.

Теперь в коде Activity пропишем обработчики кнопок с сохранением и чтением файла:

При нажатии на кнопку сохранения будет создаваться поток вывода FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE)

В данном случае введенный текст будет сохраняться в файл «content.txt». При этом будет использоваться режим MODE_PRIVATE

Система позволяет создавать файлы с двумя разными режимами:

MODE_PRIVATE : файлы могут быть доступны только владельцу приложения (режим по умолчанию)

MODE_APPEND : данные могут быть добавлены в конец файла

Поэтому в данном случае если файл «content.txt» уже существует, то он будет перезаписан. Если же нам надо было дописать файл, тогда надо было бы использовать режим MODE_APPEND:

Для чтения файла применяется поток ввода FileInputStream :

Подробнее про использование потоков ввода-вывода можно прочитать в руководстве по Java: https://metanit.com/java/tutorial/6.3.php

В итоге после нажатия кнопки сохранения весь текст будет сохранен в файле /data/data/название_пакета/files/content.txt

Где физически находится созданный файл? Чтобы увидеть его на подключенном устройстве перейдем в Android Stud в меню к пункту View -> Tool Windows -> Device File Explorer

После этого откроектся окно Device File Explorer для просмотра файловой системы устройства. И в папке data/data/[название_пакета_приложения]/files мы сможем найти сохраненный файл.

Источник

Оцените статью