- Saving Files
- This lesson teaches you to
- You should also read
- Choose Internal or External Storage
- Obtain Permissions for External Storage
- Save a File on Internal Storage
- Save a File on External Storage
- Query Free Space
- Delete a File
- Missing essential plugin: org.jetbrains.android #81
- Comments
- ajcasagrande commented Nov 14, 2020 •
- ajcasagrande commented Nov 14, 2020
- chetansharma10 commented Jan 3, 2021
- ajcasagrande commented Jan 3, 2021
- Sagar-2-99 commented May 1, 2021
- NunoFernandesofficial commented May 11, 2021
- spike commented May 18, 2021 •
- effiedude commented Jun 25, 2021
- simarjeet30 commented Aug 17, 2021
- simarjeet30 commented Aug 20, 2021
- erperejildo commented Aug 29, 2021 •
- gargbindu commented Aug 30, 2021
- Как я могу получить доступ к /storage /emulated /0 /DCIM на устройстве Android?
- Терминология
- Результаты поиска
- Описание кода
- Пример использования
- Заключение
- Как найти папку storage на Андроид?
- Опишите причину своей жалобы
- 3 ответа
- Похожие вопросы
- Популярные теги
Saving Files
This lesson teaches you to
You should also read
Android uses a file system that’s similar to disk-based file systems on other platforms. This lesson describes how to work with the Android file system to read and write files with the File APIs.
A File object is suited to reading or writing large amounts of data in start-to-finish order without skipping around. For example, it’s good for image files or anything exchanged over a network.
This lesson shows how to perform basic file-related tasks in your app. The lesson assumes that you are familiar with the basics of the Linux file system and the standard file input/output APIs in java.io .
Choose Internal or External Storage
All Android devices have two file storage areas: «internal» and «external» storage. These names come from the early days of Android, when most devices offered built-in non-volatile memory (internal storage), plus a removable storage medium such as a micro SD card (external storage). Some devices divide the permanent storage space into «internal» and «external» partitions, so even without a removable storage medium, there are always two storage spaces and the API behavior is the same whether the external storage is removable or not. The following lists summarize the facts about each storage space.
- It’s always available.
- Files saved here are accessible by only your app by default.
- When the user uninstalls your app, the system removes all your app’s files from internal storage.
Internal storage is best when you want to be sure that neither the user nor other apps can access your files.
- It’s not always available, because the user can mount the external storage as USB storage and in some cases remove it from the device.
- It’s world-readable, so files saved here may be read outside of your control.
- When the user uninstalls your app, the system removes your app’s files from here only if you save them in the directory from getExternalFilesDir() .
External storage is the best place for files that don’t require access restrictions and for files that you want to share with other apps or allow the user to access with a computer.
Tip: Although apps are installed onto the internal storage by default, you can specify the android:installLocation attribute in your manifest so your app may be installed on external storage. Users appreciate this option when the APK size is very large and they have an external storage space that’s larger than the internal storage. For more information, see App Install Location.
Obtain Permissions for External Storage
To write to the external storage, you must request the WRITE_EXTERNAL_STORAGE permission in your manifest file:
Caution: Currently, all apps have the ability to read the external storage without a special permission. However, this will change in a future release. If your app needs to read the external storage (but not write to it), then you will need to declare the READ_EXTERNAL_STORAGE permission. To ensure that your app continues to work as expected, you should declare this permission now, before the change takes effect.
However, if your app uses the WRITE_EXTERNAL_STORAGE permission, then it implicitly has permission to read the external storage as well.
You don’t need any permissions to save files on the internal storage. Your application always has permission to read and write files in its internal storage directory.
Save a File on Internal Storage
When saving a file to internal storage, you can acquire the appropriate directory as a File by calling one of two methods:
getFilesDir() Returns a File representing an internal directory for your app. getCacheDir() Returns a File representing an internal directory for your app’s temporary cache files. Be sure to delete each file once it is no longer needed and implement a reasonable size limit for the amount of memory you use at any given time, such as 1MB. If the system begins running low on storage, it may delete your cache files without warning.
To create a new file in one of these directories, you can use the File() constructor, passing the File provided by one of the above methods that specifies your internal storage directory. For example:
Alternatively, you can call openFileOutput() to get a FileOutputStream that writes to a file in your internal directory. For example, here’s how to write some text to a file:
Or, if you need to cache some files, you should instead use createTempFile() . For example, the following method extracts the file name from a URL and creates a file with that name in your app’s internal cache directory:
Note: Your app’s internal storage directory is specified by your app’s package name in a special location of the Android file system. Technically, another app can read your internal files if you set the file mode to be readable. However, the other app would also need to know your app package name and file names. Other apps cannot browse your internal directories and do not have read or write access unless you explicitly set the files to be readable or writable. So as long as you use MODE_PRIVATE for your files on the internal storage, they are never accessible to other apps.
Save a File on External Storage
Because the external storage may be unavailable—such as when the user has mounted the storage to a PC or has removed the SD card that provides the external storage—you should always verify that the volume is available before accessing it. You can query the external storage state by calling getExternalStorageState() . If the returned state is equal to MEDIA_MOUNTED , then you can read and write your files. For example, the following methods are useful to determine the storage availability:
Although the external storage is modifiable by the user and other apps, there are two categories of files you might save here:
Public files Files that should be freely available to other apps and to the user. When the user uninstalls your app, these files should remain available to the user.
For example, photos captured by your app or other downloaded files.
Private files Files that rightfully belong to your app and should be deleted when the user uninstalls your app. Although these files are technically accessible by the user and other apps because they are on the external storage, they are files that realistically don’t provide value to the user outside your app. When the user uninstalls your app, the system deletes all files in your app’s external private directory.
For example, additional resources downloaded by your app or temporary media files.
If you want to save public files on the external storage, use the getExternalStoragePublicDirectory() method to get a File representing the appropriate directory on the external storage. The method takes an argument specifying the type of file you want to save so that they can be logically organized with other public files, such as DIRECTORY_MUSIC or DIRECTORY_PICTURES . For example:
If you want to save files that are private to your app, you can acquire the appropriate directory by calling getExternalFilesDir() and passing it a name indicating the type of directory you’d like. Each directory created this way is added to a parent directory that encapsulates all your app’s external storage files, which the system deletes when the user uninstalls your app.
For example, here’s a method you can use to create a directory for an individual photo album:
If none of the pre-defined sub-directory names suit your files, you can instead call getExternalFilesDir() and pass null . This returns the root directory for your app’s private directory on the external storage.
Remember that getExternalFilesDir() creates a directory inside a directory that is deleted when the user uninstalls your app. If the files you’re saving should remain available after the user uninstalls your app—such as when your app is a camera and the user will want to keep the photos—you should instead use getExternalStoragePublicDirectory() .
Regardless of whether you use getExternalStoragePublicDirectory() for files that are shared or getExternalFilesDir() for files that are private to your app, it’s important that you use directory names provided by API constants like DIRECTORY_PICTURES . These directory names ensure that the files are treated properly by the system. For instance, files saved in DIRECTORY_RINGTONES are categorized by the system media scanner as ringtones instead of music.
Query Free Space
If you know ahead of time how much data you’re saving, you can find out whether sufficient space is available without causing an IOException by calling getFreeSpace() or getTotalSpace() . These methods provide the current available space and the total space in the storage volume, respectively. This information is also useful to avoid filling the storage volume above a certain threshold.
However, the system does not guarantee that you can write as many bytes as are indicated by getFreeSpace() . If the number returned is a few MB more than the size of the data you want to save, or if the file system is less than 90% full, then it’s probably safe to proceed. Otherwise, you probably shouldn’t write to storage.
Note: You aren’t required to check the amount of available space before you save your file. You can instead try writing the file right away, then catch an IOException if one occurs. You may need to do this if you don’t know exactly how much space you need. For example, if you change the file’s encoding before you save it by converting a PNG image to JPEG, you won’t know the file’s size beforehand.
Delete a File
You should always delete files that you no longer need. The most straightforward way to delete a file is to have the opened file reference call delete() on itself.
If the file is saved on internal storage, you can also ask the Context to locate and delete a file by calling deleteFile() :
Note: When the user uninstalls your app, the Android system deletes the following:
- All files you saved on internal storage
- All files you saved on external storage using getExternalFilesDir() .
However, you should manually delete all cached files created with getCacheDir() on a regular basis and also regularly delete other files you no longer need.
Источник
Missing essential plugin: org.jetbrains.android #81
Comments
ajcasagrande commented Nov 14, 2020 •
Snap version 4.1.1.0
OS: Ubuntu 18.04
The text was updated successfully, but these errors were encountered:
ajcasagrande commented Nov 14, 2020
Apparently this was a system configuration issue. Somehow the kotlin plugin was disabled in my
chetansharma10 commented Jan 3, 2021
How can I fix this.
ajcasagrande commented Jan 3, 2021
In my case all I had to do was open the file
/.config/Google/AndroidStudio4.1/disabled_plugins.txt and delete the line that referenced Kotlin . Note that the file path may be different based on your version of AS.
/.config/Google/ AndroidStudio4.1/disabled_plugins.txt and delete the line that referenced Kotlin. Note that the file path may be different based on your version of AS. — You are receiving this because you commented. Reply to this email directly, view it on GitHub , or unsubscribe .
Sagar-2-99 commented May 1, 2021
in my mac i haven’t found this file so plz help me
NunoFernandesofficial commented May 11, 2021
in my mac i haven’t found this file so plz help me
only way is to reinstall the Big Sur.
spike commented May 18, 2021 •
in my mac i haven’t found this file so plz help me
On a mac, open your finder, type disabled_plugins.txt in the search box of your finder.
On my mine, it was located at MYUSERNAME > Library > Application Support > Google > AndroidStudioxx
Then just remove the line that references org.jetbrains.kotlin
By the way, the Library folder in your home user directory is a hidden folder. If you can’t see it in your finder, that’s the reason why.
effiedude commented Jun 25, 2021
Donot deleate or disable any plugin that installed by studio
simarjeet30 commented Aug 17, 2021
I am getting this error even after so many reinstallations from scratch .I even deleted disable_plugin.txt file ,but still getting the same error .If anyone knows about it ,Please respond.
simarjeet30 commented Aug 20, 2021
erperejildo commented Aug 29, 2021 •
I don’t have any Google folder within .config
gargbindu commented Aug 30, 2021
In case of MacOS, you can find the disabled_plugins file using the command given below.
/Library -name disabled_plugins.txt
In my case next command in terminal helped to find bad files
find
/Library -name disabled_plugins.txt
I found these files and deleted all of them and fixed the issue.
Источник
Как я могу получить доступ к /storage /emulated /0 /DCIM на устройстве Android?
Скачивая файлы на своем Андроид смартфоне или планшете, многие пользователи сталкиваются с тем, что они не могут найти скачанный файл. Они просто не знают, куда скачиваются файлы на Андроид. В этом материале мы постараемся решить эту проблему.
Если коротко, то на Андроид файлы скачиваются в папку Download. А место расположения этой папки может меняться в зависимости от прошивки вашего Андроид устройства. Например, папка Download может размещаться по одному из адресов:
Для того чтобы найти данную папку установите хороший файловый менеджер. Например, такой как AntTek Explorer Ex.
Если скачанных файлов нет в папке Download, то возможно программа, с помощью которой вы скачивали, сохранила файлы в другую папку. Откройте программу и войдите в ее настройки. Возможно, там будет указана папка для сохранения скачанных файлов. Например, в веб-браузере Dolphin для того чтобы сменить папку для сохранения скачанных файлов необходимо открыть: Настройки – Конфиденциальность и персональные данные – Загрузить директорию.
Кроме этого, нередко в самой программе можно посмотреть список файлов, которые были скачаны. Например, такая функция есть в веб-браузерах Dolphin и Firefox.
Также нужно помнить, что после каждого скачанного файла в верхнем меню с уведомлениями появляется специальное сообщение, о том, что был скачан файл. Нажав на это сообщение, вы сможете открыть скачанный файл.
Есть чем дополнить материал? Расскажите об этом в комментариях.
—> Разрабатывая приложение для проведения соревнований, я столкнулся с проблемой хранения базы данных. Проблема состояла в том, как мне определить внешнюю карту памяти. В целом поиск в сети точного ответа не дал. Поэтому, объединив все найденные результаты, я собрал свой класс. Если кому интересно, смотрим под катом. Итак, начнем с теории.
Терминология
Гугл нам говорит, что есть следующие понятия:
- Внутренняя (internal) память — это часть встроенной в телефон карты памяти. При ее использовании по умолчанию папка приложения защищена от доступа других приложений (Using the Internal Storage).
- Внешняя (external) память — это общее «внешнее хранилище», т.е. это может быть как часть встроенной памяти, так и удаляемое устройство. Обычно это часть встроенной памяти, как удаляемое устройство я видел в последний раз на андройде 2.2, где встроенная память была около 2Гб, и подключаемая память становилась внешней (Using the External Storage).
- Удаляемая (removable) память — все хранилища, которые могут быть удалены из устройства без «хирургических» вмешательств.
До версии KitKat 4.4 API не предоставляло функционала для получения путей к внешней памяти. Начиная с этой версии (API 19) появилась функция public abstract File[] getExternalFilesDirs (String type), которая возвращает массив строк с путями к внутренней и внешней памяти. Но как же быть с нашей SD Card, которая вставлена в слот? Путь к ней мы опять не можем получить.
Результаты поиска
Чтобы ответить на поставленный вопрос я обратился к всезнающему гуглу. Но и он мне не дал четкого ответа. Было рассмотрено множество вариантов определения от использования стандартных функций, которые ведут к внешней памяти, но ничего общего с удаляемыми устройствами хранения данных они не имеют, до обработки правил монтирования устройств (Android же на ядре Linux работает). В последних случаях были использованы «зашитые» пути к папке с примонтироваными устройствами (в различных версиях эта директория разная). Не стоит забывать, что от версии к версии правила монтирования меняются. В конечном итоге я решил объединить все полученные знания и написал свой класс, который может нам вернуть пути к внешним и удаляемым устройствам.
Описание кода
Был создан класс MountDevice, который содержит в себе путь к устройству, тип устройства и некий хэш. Типов устройств выделено два (внутреннюю память я не стал трогать, так как к ней доступ можно получить через API системы).
И был создан класс StorageHelper, который и осуществляет поиск доступных карт памяти. В классе StorageHelper реализовано два способа поиска — через системное окружение (Environment) и с использованием утилиты Linux mount, а точнее результата ее выполнения.
Способ первый — Environment
При работе с окружением я использую стандартную функцию getExternalStorageDirectory() для получения информации о внешней памяти. Чтобы получить информацию о удаляемой памяти, я использую переменную окружения «SECONDARY_STORAGE«. Внешняя память всегда одна и обычно всегда есть, поэтому проверяем ее на читаемость, вычисляем хэш и запоминаем. Удаляемой памяти может быть много, поэтому необходимо полученную строку разбить по разделителю и проверять каждое значение. Функция fillDevicesEnvirement
Вариант решения взят со stackoverflow. Ответ где-то там внизу.
Способ второй — mount
Так как у меня долго не получалось заставить систему мне сказать путь к удаляемой памяти, я решил искать в сторону примонтированных устройств. В системе есть файлы конфигурации, в которых описаны правила монтирования внешних устройств. Все бы хорошо, но на Android версии 4.* к этому файлу простым смертным доступа нет, поэтому рассматривать этот способ не буду. Вернемся к утилите mount. При запуске без параметров команда возвращает список смонтированных файловых систем. Удаляемые устройства имеют обычно формат файловой системы FAT, то будем выделять строки, в которых есть характеристика «fat«. Внешняя память будет характеризоваться параметром «fuse«. Примечание: при использовании такого способа не всегда корректно (скорее всего я что-то не учел) определяются типы смотнтированных устройств. Разницу замечал на разных версиях Android. Поэтому этот способ можно использовать как дополнительный. Функция fillDevicesProcess
Вариант решения взят со stackoverflow. Ответов там несколько примерно одинаковых.
Про дублирование
Многие замечали в директории монтирования устройств такую картину:
И что самое интересно, все это одна и та же внешняя карта памяти. Такое дробление начинается с версии Jelly Bean и сделано это для поддержки многопользовательского режима работы системы. Более подробно тут. И вот, чтобы не получать одну и туже карту памяти как различные устройства, необходим способ определения идентичности. Если бы был доступ к конфигурации монтирования, то и вопросов не было. Но доступа нет. Поэтому я тут подсмотрел решение с расчетом хэша для каждого устройства:
- создаем StringBuilder
- записываем в него общий размер устройства и размер используемого пространства устройства
- обходим содержимое корня устройства
- записываем имя каталога
- записываем имя файла и размер
- вычисляем hash
Своя функция расчета хэша calcHash
Пример использования
Заключение
Подробные рассуждения по этому вопросу понимания памяти в Android, некоторые советы можно прочитать тут. Исходный код всего класса расположен еще нигде не расположен. На днях постараюсь разместить на gitHub. Кто еще какими способами пользуется? UPD1: Исходный код класса на bitbucket 173 237.3k 173
Как найти папку storage на Андроид?
Опишите причину своей жалобы
Распаковал архив в storage и не могу найти указаный путь
как найти папку /storage/sdcard0/ на Android?
Это вообще-то не папка, storage это хранилище общее, включает в себя память устройства, внутреннюю память и внешнюю карту памяти.Потому и пишет storage/SDcard 0/а дальше уже папки. Вы распаковать наверное в sdcard 0, там и надо искать, а может в sdcard1 смотря куда направили.
Для того, чтобы было все понятно с этим, достаточно установить любой файловый менеджер, например Тотал Коммандер, а вот в нем уже можно увидеть, что папка storage/sdcard0 находится вот здесь:
sdcard0 — обычно карта памяти устройства, во всяком случае у меня именно так;
sdcard1 — встроенная память, на которой можно хранить файлы(для приложений имеется другой отдел памяти, но в данном случае это не важно).
Распаковывать архивы и добавлять другие файлы следует в одно из этих расположений, а вот просто в корень файловой системы их не рекомендуется помещать.
На самом деле storage в android это не папка а раздел который включает в себя реальные карты памяти, как внутреннюю так и флеш память (SD). А когда прописывается путь к какому то файлу то в начале указывается storage.
Недавно я потерял содержимое карты micro-SD и не обновил содержимое достаточно недавно. К счастью, я заметил, что фотографии, которые я отсутствовал, оказались в /storage/emulated/0/DCIM/.thumbnails на моем устройстве Android 5.1. Печально то, что я не могу добраться до этих файлов, чтобы что-либо делать с ними на моем устройстве. Единственный способ, которым я даже знал, что они были там, — это то, что ASTRO File Manager вывел их, когда искал фотографии. Мне бы хотелось, чтобы они были в надежном месте и надеялись сделать это через мой компьютер. Кто-нибудь знает, как заставить мой компьютер (Windows 7) распознать этот файл? (Естественно, я сказал своему компьютеру просмотреть скрытые файлы, так что это не проблема.) Все, что я вижу, это /Внутреннее хранилище и /SD-карта (нет /хранилище). Если у вас есть обходной путь, сообщите мне об этом. Если я смогу переместить (или еще лучше скопировать) эти фотографии в другое место на своем телефоне, а затем переместить их, это будет совершенно замечательно.
3 ответа
Папка «/storage /emulated /» на самом деле не существует. Это то, что можно назвать «символической ссылкой» или, проще говоря, ссылкой на то, где хранятся реальные данные. Вам нужно будет найти фактическое физическое местоположение на вашем устройстве, где оно хранится. Поскольку он находится в /storage/emulated/0/DCIM/.thumbnails, он, вероятно, находится в /Internal Storage /DCIM /.thumbnails /. Обратите внимание, что эта папка, вероятно, содержит только «миниатюры», которые представляют собой очень маленькие версии реальных файлов. Возможно, ваши настоящие файлы ушли навсегда, если ваша SD-карта невосстановима.
Изменить: «Никогда не говори никогда» Ссылка на самом деле относится к эмулированной SD-карте на вашем устройстве. Получите доступ к данным «напрямую» * в качестве SD-карты, и у вас будет доступ ко всем данным на этой карте. * Файл Airdroid «приложение» позволит это. И, если память обслуживается, доступ через USB-кабель для передачи данных также будет.
ответил phyrfox 3 августа 2015, 06:22:20 3
Я мог бы восстановить мои файлы, перейдя в «Настройки -> Хранение и usb -> Изображения -> Камера. Если вы выберете фотографию, то в правом верхнем меню изменится значение« Выбрать все »и« Копировать в .. »Сначала выберите все, затем скопируйте в папку« Загрузка »или в зависимости от того, что видно в проводнике. После копирования в нужную папку Скопируйте из этой папки в папку« Компьютеры ».
ответил The Analyst 12 июня 2016, 17:28:39 1
У меня была аналогичная проблема, только папка не начиналась с . . Что для меня решило сбросить Media Manager.
Перейдите в Settings -> Apps , убедитесь, что Show System проверяется в меню, ищите Media Store или что-то в этом роде, щелкните по нему и Clear Data . Затем перезагрузите телефон и подождите, пока Media Store не восстановит себя.
Перестройка занимает несколько минут. Вы можете проверить, выполняется ли это путем мониторинга использования данных в том же месте, где вы его очистили. Как только он перестает расти в течение пары минут, это делается. Например, мой остановился на 21 МБ.
ответил André Chalella 6 марта 2017, 05:09:28
Похожие вопросы
8 Как получить доступ к столбцу, имя которого я не могу получить доступ в цепочечных операций 3 Как я могу удалить учетную запись Yahoo навсегда, когда я не могу получить к ней доступ? 4 Как я могу избежать состояния «TypeError: не могу получить доступ к мертвому объекту» в моем дополнении Firefox? 24 Как я могу получить доступ к google.com за пределами США? 23 Могу ли я получить доступ к Gmail через SSL? 14 Я не могу получить доступ к корневой папке 39 Как я могу получить доступ к ServletContext из веб-службы JAX-WS? 9 Как я могу получить доступ к переменным JavaScript в JSP? 2 Не могу получить доступ к личным файлам 78 Как я могу получить доступ к сессии в веб-методе? 59 Как я могу получить доступ к ResourceDictionary в wpf из кода C #? 7 Как я могу получить доступ к SQLite с помощью C #? 4 Как я могу получить доступ к `this` в обработчике событий? 4 Не могу получить доступ к JPanel публично () 4 Как я могу получить доступ к фейсбуку на питоне? 4 Как я могу получить доступ к модифицированному QLabel? 4 Как я могу получить доступ к иконкам GitHub? 2 Magento — не удается получить доступ к удаленному сайту, но может получить доступ к простому файлу index.html 7 Не удается получить доступ к локальному хосту после обновления до Mavericks, но может получить доступ к 127.0.0.1 107 Могу ли я получить доступ к Ubuntu из Windows удаленно?
Популярные теги
security × 330 linux × 316 macos × 282 7 × 268 performance × 244 command-line × 241 sql-server × 235 joomla-3.x × 222 java × 189 c++ × 186 windows × 180 cisco × 168 bash × 158 c# × 142 gmail × 139 arduino-uno × 139 javascript × 134 ssh × 133 seo × 132 mysql × 132 19.04.2015
После этого скачиваем интересующий вас файл из Интернета. Как правило, его можно открыть, просто нажав на уведомление, однако если по какой-либо причине оно свернулось, а файл открыть всё же нужно, на помощь придет файловый менеджер. Поможет он и просто в том случае, если кто-то из ваших друзей перекинул документ на ваш смартфон с помощью USB-кабеля. Тогда вопрос «Где же он находится?» станет самым актуальным.
Все скачанные из Интернета файлы хранятся в папке «Download». Для её открытия вам требуется открыть файловый менеджер, затем найти в каталогах данную папку. После этого вы сможете открыть любой скачанный ранее файл, в том числе установочный *.apk, *.zip и так далее.
В случае, если вам неизвестно, где именно сохранился ваш файл, вы можете произвести поиск, нажав на иконку лупы в приложении, речь не идет именно о Cabinet. С тем же успехом можно использовать и ES Проводник, например.
Хотим обезопасить пользователей от случайных действий. Так как память смартфонов разделена на два раздела: системная и внутренняя, есть риски удаления системных файлов, что приведет к некорректной работе смартфона. Для их удаления вам потребуются Root-права, однако возможны и случаи, когда Root-доступ имеется, а сам пользователь об этом и понятия не имеет.
Таким образом, мы научились находить скачанные из Интернета файлы. Предлагаем поддержать неопытных пользователей и прокомментировать статью, добавив свои дополнения.
Источник