- Read from file android studio
- Android Read Write Internal Storage File Example
- 1. Android Read Write Data To Internal File.
- 1.1 Where Your Android App Internal Data File Saved In?
- 1.2 Read Write Android File Code Snippets.
- 2. Android Internal File Operation Example.
- 2.1 Layout XML File.
- 2.2 Activity Java File.
- 3. Question & Answer.
- 3.1 Can not write text file to android internal storage.
Read from file android studio
Android supports all the standard Java file I/O APIs for create, read, update, and delete (CRUD) operations, along with some additional helpers to make accessing those files in specific locations a little more convenient. There are three main locations in which an application can work with files:
- Internal storage. Protected directory space to read and write file data. Internal storage is always located in the device’s flash memory area — part of the 8 GB or 32 GB of «storage» that your device was advertised with—under /data/data/PKG_NAME/.
- External storage. Externally mountable space to read and write file data. Requires the WRITE_EXTERNAL_STORAGE permission in API Level 4+. Often, this is a physical SD card in the device.
- Assets. Protected read-only space inside the APK bundle. Good for local resources that can’t or shouldn’t be compiled.
However, there are several complications.
First, some devices don’t have removable storage. On these, the external storage directory always exists—it is just in a different partition of the same flash memory storage as internal storage.
Second, on devices that do have removable storage, the storage might be removed at the time your application checks it. There’s no point trying to write it if it’s not there.
Read from res directory
If your application requires external file resources, you can include them in your distribution package by placing them in the res/raw folder of your project hierarchy.
To access these read-only file resources, call the openRawResource method from your application’s Resource object to receive an InputStream based on the specified file. Pass in the filename (without the extension) as the variable name from the R.raw class, as shown in the following code
Read from assets directory
Android offers one more directory where you can keep files which also will be included in package. This directory called /assets. There are some difference from res directory.
With resources, there’s built-in support for providing alternatives for different languages, OS versions, screen orientations, etc., as described here. None of that is available with assets. Also, many parts of the API support the use of resource identifiers. Finally, the names of the resources are turned into constant field names that are checked at compile time, so there’s less of an opportunity for mismatches between the code and the resources themselves. None of that applies to assets.source
Read/Write to Internal Storage
This area of storage is sort of private to the application. It is always available to the application and gets purged when the app is uninstalled by the user.
Internal storage refers to the hard drive on device. Internal storage gives you the ability to prevent other applications from accessing the files you save and are tied directly to your app.
Files stored in /data/data/packagename/files/filename.txt. There are few modes for file access
- MODE_PRIVATE — create a new file or overwrite one if it already exists with the same name
- MODE_APPEND — create the file if it doesn’t exist and allow you to append to the file if it does exist
- MODE_WORLD_READABLE — file is readable by any other application
- MODE_WORLD_WRITEABLE — file is writeable by any other application
Internal storage can be accessed using the Context methods openFileInput(String filename) , which returns a FileInputStream object, or openFileOutput(String filename, int mode) , which returns a FileOutputStream .
Write to file in internal storage
Read from file in internal storage
The Context method getFilesDir() returns the root of this directory, and you can then access it using normal java.io methods and classes.
Data is written to the file streams as bytes, so higher-level data (even strings) must be converted into and out of this format.
Following is a method to save an image to internal storage in Kotlin
Read/Write to SDCard
The key differentiator between internal and external storage is that external storage is mountable. This means that the user can connect his or her device to a computer and have the option of mounting that external storage as a removable disk on the PC. Often, the storage itself is physically removable (such as an SD card), but this is not a requirement of the platform.
External storage is typically either a removable storage media (i.e. SD Card) or an internal non-removable storage that is accessed in the same manner.
The most important thing to remember when storing files on external storage is that no security is enforced on files stored here. Any application can access, overwrite, or delete files stored on the external storage.
In order to write data to SDCard, the application need permission WRITE_EXTERNAL_STORAGE, which can be specified in the file AndroidManifest.xml.
Check external storage
Write to SDCard
Read from SDCard
Following is a method to save an image to external storage in Kotlin
Read/Write to Cache
Should your application need to cache temporary files, Android offers both a managed internal cache, and (since Android API level 8) an unmanaged external cache. You can access them by calling the getCacheDir and getExternalCacheDir methods, respectively, from the current Context.
Files stored in either cache location will be erased when the application is uninstalled. Files stored in the internal cache will potentially be erased by the system when it is running low on available storage; files stored on the external cache will not be erased, as the system does not track available storage on external media.
Read from cache dir
Write to cache dir
Read/Write to publicly readable files
Android 2.2 (API level 8) includes a convenience method, Environment.getExternalStoragePublicDirectory , that can be used to find a path in which to store your application files. The returned location is where users will typically place and manage their own files of each type. Files that’ll remain on the storage even after the application is uninstalled by the user like media (photos, videos, etc.) or other downloaded files. This is particularly useful for applications that provide functionality that replaces or augments system applications, such as the camera, that store files in standard locations.
There are 2 methods that we can use to get the public external storage directory for placing files:
- getExternalStorageDirectory() method returns the primary (top-level or root) external storage directory.
- getExternalStoragePublicDirectorty method returns a top level public external storage directory for showing files of a particular type based on the argument passed. So basically the external storage has directories like Music, Podcasts, Pictures, etc. whose paths can be determined and returned via this function by passing the appropriate environment constants.
The getExternalStoragePublicDirectory method accepts a string parameter that determines which subdirectory you want to access using a series of Environment static constants:
- DIRECTORY_DCIM — pictures and videos taken by the device
- DIRECTORY_DOWNLOADS — files downloaded by the user
- DIRECTORY_MOVIES — movies
- DIRECTORY_MUSIC — audio fi les that represent music
- DIRECTORY_PICTURES — pictures
Note that if the returned directory doesn’t exit, you must create it before writing fi les to the directory, as shown in the following snippet
External System Directories
There are additional methods in Environment and Context that provide standard locations on external storage where specific files can be written. Some of these locations have additional properties as well.
- API Level 8
- Returns a common directory where all applications store media files. The contents of these directories are visible to users and other applications. In particular, the media placed here will likely be scanned and inserted into the device’s MediaStore for applications such as the Gallery.
- Valid type values include DIRECTORY_PICTURES , DIRECTORY_MUSIC , DIRECTORY_MOVIES , and DIRECTORY_RINGTONES .
- API Level 8
- Returns a directory on external storage for media files that are specific to the application. Media placed here will not be considered public, however, and won’t show up in MediaStore .
- This is external storage, however, so it is still possible for users and other applications to see and edit the files directly: there is no security enforced.
- Files placed here will be removed when the application is uninstalled, so it can be a good location in which to place large content files the application needs that one may not want on internal storage.
- Valid type values include DIRECTORY_PICTURES , DIRECTORY_MUSIC , DIRECTORY_MOVIES , and DIRECTORY_RINGTONES .
- API Level 8
- Returns a directory on internal storage for app-specific temporary files. The contents of this directory are visible to users and other applications.
- Files placed here will be removed when the application is uninstalled, so it can be a good location in which to place large content files the application needs that one may not want on internal storage.
Context.getExternalFilesDirs() and Context.getExternalCacheDirs() .
- API Level 19
- Identical features as their counterparts described previously, but returns a list of paths for each storage volume on the device (primary and any secondary volumes)
- For example, a single device may have a block of internal flash for primary external storage, and a removable SD card for secondary external storage.
- API Level 21
- Files placed in these volumes will be automatically scanned and added to the device’s media store to expose them to other applications. These will generally also be visible to the user through core applications like the Gallery.
Sharing files via a FileProvider
Sometimes you want to share internal-storage files with another app, without the bother of putting the data into a Cursor and creating a ContentProvider.
The FileProvider class allows you to make files available to another application, usually in response to an Intent. It is simpler to set up than a ContentProvider , but is actually a subclass of ContentProvider .
This example exposes a photo.jpg file from one application to another. For this example I have created an Android Studio project called FileProviderDemo , which contains two different applications in two different packages, providerapp and requestingapp . We’ll start by discussing the Provider app since it contains the actual FileProvider . However, you have to run the Requester application first, as it will start the Provider app.
Unlike the ContentProvider case, you rarely have to write code for the provider itself; instead, use the FileProvider class directly as a provider in your AndroidManifest.xml file, as shown in following example.
The provider definition
The provider does not have to be exported for this usage, but must have the ability to grant Uri permissions as shown. The meta-data element gives the name of a simple mapping file, which is required to map «virtual paths» to actual paths, as shown.
The filepaths.xml file
Finally, there has to be an Activity to provide the Uri to the requested file. In our example this is the ProvidingActivity , shown in following example.
The important part of this code is in the provideFile() method, which:
- Creates a Uri for the actual file (in this trivial example there is only one file, with a hardcoded filename)
- Adds flags to the result Intent to let the receiving app read this one file (only) with our permissions
- Sets the MIME type of the result
- Adds the file Uri as data to the result Intent
- Sets the result Intent , and the «success» flags to Activity.RESULT_OK • Calls finish() to end the Activity
Remember that the point of the FileProvider is to share files from one application to another, running with different user permissions. Our second application also has only one Activity , the «requesting» Activity. Most of this is pretty standard boilerplate code. In onCreate() , we create the requesting Intent :
The main part of the UI is a text area, which initially suggests that you request a file by pressing the button. That button’s action listener is only one line:
This will result in a subsequent call to onActivityComplete() , which is shown in following example.
Assuming that the request succeeds, you will get called here with requestCode set to the only valid action, RESULT_OK , and the resultIntent being the one that the providing Activity set as the Activity result—that is, the Intent wrapping the Uri that we need in order to read the file! So we just get the Uri from the Intent and open that as an input stream, and we can read the «secret» file from the providing application’s otherwise — private internal storage.
How to check free and used space in internal and external storage
There is auxiliary class to get information about free and used space in internal and external storage
How to download photo from url and save to storage
To download photo from url you can use android-async-http.
How to get file extension and mime type
You can get file extension and mime type:
Method to save an image to gallery and return URI in Kotlin
Источник
Android Read Write Internal Storage File Example
Android data can be saved in internal storage ( ROM ), external storage(SD card), shared preferences, or SQLite database. This article will introduce how to read and write data in internal storage via a java file.
1. Android Read Write Data To Internal File.
- Android is based on Linux, the android file system is Linux-based also.
- Android studio provides the android device monitor tool for you to monitor and transfer files between Android devices and your PC. Please refer Android Device Monitor Cannot Open Data Folder Resolve Method.
1.1 Where Your Android App Internal Data File Saved In?
- All android app internal data files are saved in the /data/data/ folder.
- In this example, my app data internal file is saved in /data/data/com.dev2qa.example folder. You can watch the youtube video https://youtu.be/AJBgBBMKO5w to see the android app’s internal data files saved directory.
- From the youtube video, we can see that there are files and cache subfolders under the package name folder.
- files folder — android.content.Context’sgetFilesDir() method can return this folder. This folder is used to save general files.
- cache folder — android.content.Context’sgetCacheDir() method can return this folder. This folder is used to save cached files.
- When the device’s internal storage space is low, cache files will be removed by android os automatically to make internal storage space bigger. Generally, you need to delete the unused cache files in the source code timely, the total cache file size is better not more than 1 MB.
1.2 Read Write Android File Code Snippets.
- Android application is written in java, so the file operation uses java classes also.
- Below are the code snippets for read/write data from/to the file in android.
1.2.1 Read Android File In The Package files Folder.
- Call android.content.Context‘s openFileInput(userEmalFileName) method to get FileInputStream object.
- The input parameter is just the file name.
- This file should be saved in the files folder.
- Then use the FileInputStream object to read data.
1.2.2 Read Android File In The Package cache Folder.
- The below source code will read the android files in the package cache folder.
1.2.3 Write File To The Package files Folder.
- Method 1: Use Context’s getFilesDir() to get the package files folder, then write file into it.
- Method 2: Call Context’s openFileOutput(userEmalFileName, Context.MODE_APPEND) method to get FileOutputStream object.
- The first parameter is the file name, the second parameter’s value can be one of the below values.
- Context.MODE_PRIVATE: This means this file can only be read/write by this android app that creates it. This mode will overwrite an existing file, if not exist then create it.
- Context.MODE_APPEND: This mode will append data to an existing file. If not exist it will create a new one.
1.2.4 Write File To The Package cache Folder.
- Use Context’s getCacheDir() to get cache folder.
2. Android Internal File Operation Example.
- You can watch the example demo video on youtube https://youtu.be/HqbRR6TQVvY.
- There are one input text box and five buttons on the android example app main screen.
- The buttons’ function can be easily understood by the button’s label text.
- The button’s label text is WRITE TO FILE, READ FROM FILE, CREATE CACHED FILE, READ CACHED FILE, CREATE TEMP FILE from up to bottom.
- After you run the example, you can see the below files in the android device monitor. You can pull down the file to your local PC to see the file contents also.
- If you meet any problem in using the android device monitor, please refer to Android Device Monitor Cannot Open Data Folder Resolve Method. This article will tell you how to resolve those errors.
2.1 Layout XML File.
- activity_write_read_file.xml
2.2 Activity Java File.
- WriteReadFileActivity.java
- If you meet the error message Instant Run requires ‘Tools | Android | Enable ADB integration’ to be enabled when you run this example. You can click Tools —> Android menu, and check Enable ADB integration option in the popup menu to resolve it.
3. Question & Answer.
3.1 Can not write text file to android internal storage.
- My android app is very simple, I just want to write some text to a file and save the text file to the internal storage. I follow this article to write source code, but I can not find the text file in both the android physical device and the simulator. I can not read the file content out in java source code. Can you tell me why? Thanks a lot.
- Android 11 has announced a new policy when you want to manage storage. The internal storage root folder can not be used to store files unless you add the below permission in your AndroidManifest.xml file.
And when you run the application, you can request this permission to the user with the below code.
Then you can process user response in the onRequestPermissionsResult() method in the activity.
This site uses Akismet to reduce spam. Learn how your comment data is processed.
Thanks.Great Article Guys.
I am a beginner of android programming, and I want to write some data to a file saved in android internal storage device. I found this article and write the source code as below. But I found after I write the data to internal storage file with the method writeToFile, I can not read the written file content in android internal storage device in the readFileButton method. Can you tell me what wrong in my source code? Thanks a lot.
public void writeToFile(String fileName, String fileContent)<
try <
// Create a FileOutputStream object with the provided file name.
FileOutputStream fos = openFileOutput(fileName , Context.MODE_PRIVATE);
// Write the file content to the file.
fos.write(fileContent.getBytes());
// Close the file output stream to flush the data to the file.
fos.close();
> catch (Exception e) <
e.printStackTrace();
>
>
public void readFileButton(View v) <
// Read the file text content.
try <
// Define the internal stored file name.
String fileName = “test.txt”;
// Create a FileInputStream object.
FileInputStream fis =openFileInput(fileName);
// Create a InputStreamReader object.
InputStreamReader isr = new InputStreamReader(fis);
// Define the char array.
char[] ib= new char[1024];
// Store read out file data.
String fileData = “”;
// Read 1024 character data from file.
int charRead = isr.read(ib);
// While not end of the file.
while (charRead>0) <
// Convert the char array to a string object.
String readstring = String.copyValueOf(inputBuffer,0,charRead);
// Add the read out file data.
fileData +=readstring;
Источник