Lưu tập tin ở bộ nhớ trong
Để đơn giản hóa việc đọc và ghi luồng dữ liệu tập tin được lưu ở bộ nhớ trong (hay gọi là thư mục dữ liệu bên trong ứng dụng trong hê thống) Android cung cấp các phương thức openFileInput / openFileOutput tương ứng cho 2 luồng đọc và ghi từ context của phiên làm việc hiện tại của ứng dụng. Nếu tập tin có tên là giá trị được truyền làm đối số của hàm FileOutputStream() không tồn tại (tập tin chưa được tạo ra và lưu lại), hệ thống sẽ tự động tạo tập tin và ghi xuống bộ nhớ. Nếu đã có sẵn thì hệ thống mặc định sẽ chép đè nội dung mới lên nội dung cũ của tập tin. Trừ trường hợp nếu mode được gán là Context.MODE_APPEND thì nội dung mới sẽ được thêm vào nối tiếp nội dung sẵn có trong tập tin.
Một số điểm quan trọng trong việc lưu trữ trong bộ nhớ trong
- Dữ liệu trong bộ nhớ được phép đọc và ghi vào tập tin.
- Các tập tin này chỉ được truy cập bởi chính ứng dụng đó, không cho phép truy cập bởi ứng dụng khác.
- Các tập tin này vẫn tồn tại khi ứng dụng vẫn tồn tại, các tập tin sẽ bị xóa tự động khi ứng dụng uninstall.
- Các tập tin này lưu trữ trong thư mục data/data theo sau là tên package của ứng dụng.
- Có thể phân quyền cho các ứng dụng khác truy cập các tập tin này.
- Để phân quyền dữ liệu chúng ta có thể dùng chế đô MODE_PRIVATE
Các Mode lưu trữ ở bộ nhớ trong
MODE_PRIVATE – Đây là chế độ mặc định. MODE_PRIVATE được sử dụng để thiết lập chế độ riêng tư, không chấp nhận ứng dụng từ bên ngoài.
MODE_APPEND – Dữ liệu được thêm vào tập tin đã tồn tại
Ghi dữ liệu vào tập tin
- Định nghĩa tên tập tin và cũng định nghĩa dữ liệu bạn muốn ghi vào tập tin.
- Sử dụng phương thức FileOutputStream .
- Đổi dữ liệu thành byte stream.
String File_Name= "Demo.txt"; //gives file name String Data="Hello!!"; //define data FileOutputStream fileobj = openFileOutput( File_Name, Context.MODE_PRIVATE); byte[] ByteArray = Data.getBytes(); //Converts into bytes stream fileobj.write(ByteArray); //writing to file fileobj.close(); //File closed
Ví dụ: Trong ví dụ này chúng ta sẽ làm ứng dụng để lưu trữ dữ liệu trong bộ nhớ trong. Trong ứng dụng có 2 Activity, Activity đầu tiên lưu trữ dữ liệu, Activity 2 dùng để đọc dữ liệu. Tiến hành tạo project, vào thư mục res /layout -> activity_main.xml thiết kế giao diện sau:
Bước 1: Tạo một project tên là InternalStorage: File->New->Android Application Project điền các thông tin ->Next ->Finish
Bước 2: Mở res -> layout -> xml (hoặc) activity_main.xml và thêm code trong Relaytive Layout.
Trong code chúng ta thêm textview, edittext và button có sự kiện onclick.
<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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="hiepsiit.com.internalstorage.Main2Activity" > <TextView android:text="name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignRight="@+id/button3" android:layout_alignEnd="@+id/button3" android:layout_marginRight="11dp" android:layout_marginEnd="11dp" android:layout_marginTop="76dp" android:id="@+id/textView3" android:textSize="18sp" android:textStyle="bold|italic" /> <TextView android:text="password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView3" android:layout_alignRight="@+id/textView3" android:layout_alignEnd="@+id/textView3" android:layout_marginTop="33dp" android:id="@+id/textView4" android:textStyle="bold|italic" android:textSize="18sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView4" android:layout_alignLeft="@+id/button4" android:layout_alignStart="@+id/button4" android:id="@+id/getname" android:textStyle="bold|italic" android:textSize="18sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/textView4" android:layout_alignLeft="@+id/getname" android:layout_alignStart="@+id/getname" android:id="@+id/getpass" android:textStyle="bold|italic" android:textSize="18sp" /> <Button android:text="@string/load" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button3" android:layout_marginLeft="35dp" android:layout_marginStart="35dp" android:onClick="loadMe" android:layout_below="@+id/textView4" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="80dp" /> <Button android:text="@string/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="54dp" android:layout_marginEnd="54dp" android:id="@+id/button4" android:onClick="backMe" android:layout_alignBaseline="@+id/button3" android:layout_alignBottom="@+id/button3" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout>
Bước 3: Trong tập tin strings.xml
chúng ta định nghĩa các nhãn cho textview, edittext và button.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">" InternalStorage"</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="name">NAME</string> <string name="password">PASSWORD</string> <string name="save">SAVE</string> <string name="next">NEXT</string> <string name="load">LOAD</string> <string name="back">BACK</string> <string name="title_activity_main2">Main2Activity</string> </resources>
Bước 4: Mở app -> src ->MainActivity.java và thêm code. Trong bước này chúng ta mở MainActivity.java và thêm các phương thức cho 2 button "SAVE" và "NEXT". Button "SAVE " lấy dữ liệu từ edittext và lưu nó vào tập tin theo định dạng là byte. Chúng ta cũng hiển thị đường dẫn tập tin thông qua đối tượng Toast. Phương thức cho button "NEXT" mở Activity 2 .
package hiepsiit.com.internalstorage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { EditText editname,editpass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editname = (EditText) findViewById(R.id.editName); editpass= (EditText) findViewById(R.id.editPass); } public void saveMe(View view) // SAVE { File file= null; String name = editname.getText().toString(); String password = editpass.getText().toString(); FileOutputStream fileOutputStream = null; try { name = name + " "; file = getFilesDir(); fileOutputStream = openFileOutput("Code.txt", Context.MODE_PRIVATE); //MODE PRIVATE fileOutputStream.write(name.getBytes()); fileOutputStream.write(password.getBytes()); Toast.makeText(this, "Saved \n" + "Path --" + file + "\tCode.txt", Toast.LENGTH_SHORT).show(); editname.setText(""); editpass.setText(""); return; } catch (Exception ex) { ex.printStackTrace(); } finally { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } public void nextMe(View view) //NEXT { Toast.makeText(this,"NEXT", Toast.LENGTH_SHORT).show(); Intent intent= new Intent(this, Main2Activity.class); startActivity(intent); } }
Bước 5: Tạo thêm Activity Android đặt tên Main2Activity . Mở res -> layout -> xml (hoặc) activity_main2.xml và thêm code:
<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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="hiepsiit.com.internalstorage.Main2Activity" > <TextView android:text="name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignRight="@+id/button3" android:layout_alignEnd="@+id/button3" android:layout_marginRight="11dp" android:layout_marginEnd="11dp" android:layout_marginTop="76dp" android:id="@+id/textView3" android:textSize="18sp" android:textStyle="bold|italic" /> <TextView android:text="password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView3" android:layout_alignRight="@+id/textView3" android:layout_alignEnd="@+id/textView3" android:layout_marginTop="33dp" android:id="@+id/textView4" android:textStyle="bold|italic" android:textSize="18sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView4" android:layout_alignLeft="@+id/button4" android:layout_alignStart="@+id/button4" android:id="@+id/getname" android:textStyle="bold|italic" android:textSize="18sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/textView4" android:layout_alignLeft="@+id/getname" android:layout_alignStart="@+id/getname" android:id="@+id/getpass" android:textStyle="bold|italic" android:textSize="18sp" /> <Button android:text="@string/load" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button3" android:layout_marginLeft="35dp" android:layout_marginStart="35dp" android:onClick="loadMe" android:layout_below="@+id/textView4" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="80dp" /> <Button android:text="@string/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="54dp" android:layout_marginEnd="54dp" android:id="@+id/button4" android:onClick="backMe" android:layout_alignBaseline="@+id/button3" android:layout_alignBottom="@+id/button3" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout>
Bước 6: Mở src -> package -> Main2Activity.java. Trong bước này chúng ta mở Main2Activity.java và thêm các phương thức cho 2 button "Load" và "Back". Button "Load" lấy dữ liệu từ tập tin và lưu nó vào đối tượng StringBuffer, sau đó hiển thị nó lên textview. Phương thức cho button "Back" mở MainActivity.
package hiepsiit.com.internalstorage; import java.io.FileInputStream; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class Main2Activity extends Activity { TextView getname, getpass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); getname = (TextView)findViewById(R.id.getname); getpass = (TextView)findViewById(R.id.getpass); } public void loadMe(View view) { try { FileInputStream fileInputStream = openFileInput("Code.txt"); int read = -1; StringBuffer buffer = new StringBuffer(); while((read =fileInputStream.read())!= -1){ buffer.append((char)read); } Log.d("Code", buffer.toString()); String name = buffer.substring(0,buffer.indexOf(" ")); String pass = buffer.substring(buffer.indexOf(" ")+1); getname.setText(name); getpass.setText(pass); } catch (Exception e) { e.printStackTrace(); } Toast.makeText(this,"Loaded", Toast.LENGTH_SHORT).show(); } public void backMe( View view) { Toast.makeText(this,"Back", Toast.LENGTH_SHORT).show(); Intent intent= new Intent(this, MainActivity.class); startActivity(intent); } }
Ứng dụng này được phát triển bởi adt bundle, android 4.2 sử dụng minimum sdk 8 and target sdk 21.
Kết quả khi chạy ứng dụng:
Xem tập tin được lưu trữ trong Shared Preference:
Chọn Window-> Show View -> Other
Sau đó, tìm File Explore ->OK
Chọn File Explore
Cập nhật công nghệ từ Youtube tại link: https://www.youtube.com/channel/UCOxeYcvZPGf-mGLYSl_1LuA/videos
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com