Android - Bộ nhớ trong
Android cung cấp nhiều loại dung lượng lưu trữ cho các ứng dụng để lưu trữ dữ liệu của chúng. Những nơi lưu trữ này được chia sẻ tùy chọn, lưu trữ bên trong và bên ngoài, lưu trữ SQLite và lưu trữ qua kết nối mạng.
Trong chương này, chúng ta sẽ xem xét bộ nhớ trong. Bộ nhớ trong là lưu trữ dữ liệu riêng tư trên bộ nhớ thiết bị.
Theo mặc định, các tệp này là riêng tư và chỉ được ứng dụng của bạn truy cập và sẽ bị xóa khi người dùng xóa ứng dụng của bạn.
Đang ghi tệp
Để sử dụng bộ nhớ trong để ghi một số dữ liệu vào tệp, hãy gọi phương thức openFileOutput () với tên của tệp và chế độ. Chế độ có thể là riêng tư, công khai, v.v. Cú pháp của nó được đưa ra dưới đây:
FileOutputStream fOut = openFileOutput("file name here",MODE_WORLD_READABLE);
Phương thức openFileOutput () trả về một thể hiện của FileOutputStream. Vì vậy, bạn nhận được nó trong đối tượng của FileInputStream. Sau đó, bạn có thể gọi phương thức ghi để ghi dữ liệu trên tệp. Cú pháp của nó được đưa ra dưới đây:
String str = "data";
fOut.write(str.getBytes());
fOut.close();
Đọc tệp
Để đọc từ tệp bạn vừa tạo, hãy gọi phương thức openFileInput () với tên của tệp. Nó trả về một thể hiện của FileInputStream. Cú pháp của nó được đưa ra dưới đây:
FileInputStream fin = openFileInput(file);
Sau đó, bạn có thể gọi phương thức đọc để đọc từng ký tự một từ tệp và sau đó bạn có thể in nó. Cú pháp của nó được đưa ra dưới đây:
int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
//string temp contains all the data of the file.
fin.close();
Ngoài các phương pháp ghi và đóng, có các phương pháp khác được cung cấp bởi FileOutputStreamlớp để viết tệp tốt hơn. Các phương pháp này được liệt kê bên dưới -
Sr.No | Phương pháp & mô tả |
---|---|
1 |
FileOutputStream(File file, boolean append) Phương thức này tạo một FileOutputStream mới ghi vào tệp. |
2 |
getChannel() Phương thức này trả về một FileChannel chỉ ghi chia sẻ vị trí của nó với luồng này |
3 |
getFD() Phương thức này trả về trình mô tả tệp bên dưới |
4 |
write(byte[] buffer, int byteOffset, int byteCount) Phương thức này Ghi số byte từ bộ đệm mảng byte bắt đầu từ vị trí bù vào luồng này |
Ngoài các phương pháp đọc và đóng, có các phương pháp khác được cung cấp bởi FileInputStreamlớp để đọc tệp tốt hơn. Các phương pháp này được liệt kê bên dưới -
Sr.No | Phương pháp & mô tả |
---|---|
1 |
available() Phương thức này trả về một số byte ước tính có thể được đọc hoặc bỏ qua mà không bị chặn để nhập thêm |
2 |
getChannel() Phương thức này trả về một FileChannel chỉ đọc chia sẻ vị trí của nó với luồng này |
3 |
getFD() Phương thức này trả về trình mô tả tệp bên dưới |
4 |
read(byte[] buffer, int byteOffset, int byteCount) Phương thức này đọc tối đa byte độ dài từ luồng này và lưu trữ chúng trong mảng byte b bắt đầu từ offset |
Thí dụ
Đây là một ví dụ minh họa việc sử dụng bộ nhớ trong để lưu trữ và đọc tệp. Nó tạo ra một ứng dụng lưu trữ cơ bản cho phép bạn đọc và ghi từ bộ nhớ trong.
Để thử nghiệm với ví dụ này, bạn có thể chạy điều này trên thiết bị thực tế hoặc trong trình giả lập.
Các bước | Sự miêu tả |
---|---|
1 | Bạn sẽ sử dụng Android Studio IDE để tạo ứng dụng Android theo gói com.example.sairamkrishna.myapplication. |
2 | Sửa đổi tệp src / MainActivity.java để thêm mã cần thiết. |
3 | Sửa đổi res / layout / activity_main để thêm các thành phần XML tương ứng |
4 | Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả |
Sau đây là nội dung của tệp hoạt động chính được sửa đổi src/MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends Activity {
Button b1,b2;
TextView tv;
EditText ed1;
String data;
private String file = "mydata";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button)findViewById(R.id.button);
b2=(Button)findViewById(R.id.button2);
ed1=(EditText)findViewById(R.id.editText);
tv=(TextView)findViewById(R.id.textView2);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
data=ed1.getText().toString();
try {
FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
fOut.write(data.getBytes());
fOut.close();
Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
FileInputStream fin = openFileInput(file);
int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
tv.setText(temp);
Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
}
catch(Exception e){
}
}
});
}
}
Sau đây là nội dung sửa đổi của xml res/layout/activity_main.xml.
Trong đoạn mã sau abc cho biết logo của tutorialspoint.com
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView android:text="Internal storage" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview"
android:textSize="35dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:id="@+id/textView"
android:layout_below="@+id/textview"
android:layout_centerHorizontal="true"
android:textColor="#ff7aff24"
android:textSize="35dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_alignLeft="@+id/textView"
android:layout_alignStart="@+id/textView" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:hint="Enter Text"
android:focusable="true"
android:textColorHighlight="#ff7eff15"
android:textColorHint="#ffff25e6"
android:layout_below="@+id/imageView"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView"
android:layout_marginTop="42dp"
android:layout_alignLeft="@+id/imageView"
android:layout_alignStart="@+id/imageView" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/abc"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="load"
android:id="@+id/button2"
android:layout_alignTop="@+id/button"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read"
android:id="@+id/textView2"
android:layout_below="@+id/editText"
android:layout_toLeftOf="@+id/button2"
android:layout_toStartOf="@+id/button2"
android:textColor="#ff5bff1f"
android:textSize="25dp" />
</RelativeLayout>
Sau đây là nội dung của res/values/string.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
Sau đây là nội dung của AndroidManifest.xml tập tin.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Hãy thử chạy ứng dụng Storage mà chúng tôi vừa sửa đổi. Tôi cho rằng bạn đã tạo raAVDtrong khi thiết lập môi trường. Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào
Bây giờ những gì bạn cần làm là nhập bất kỳ văn bản nào vào trường. Ví dụ, tôi đã nhập một số văn bản. Nhấn nút lưu. Thông báo sau sẽ xuất hiện trong AVD của bạn -
Bây giờ khi bạn nhấn nút tải, ứng dụng sẽ đọc tệp và hiển thị dữ liệu. Trong trường hợp của chúng tôi, dữ liệu sau sẽ được trả lại:
Lưu ý rằng bạn thực sự có thể xem tệp này bằng cách chuyển sang tab DDMS. Trong DDMS, chọn trình khám phá tệp và điều hướng đường dẫn này.
tools>android>android device Monitor
Điều này cũng đã được hiển thị trong hình ảnh bên dưới.