W05 File Input

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 14

CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

IV. File Input/Output – Assets


Luồng dữ liệu – Stream
o Dữ liệu input – output cần thông qua Stream.
o Stream như đường dẫn để:
o Dẫn dữ liệu từ nguồn đến chương trình để đọc dữ liệu vào (input)
o Từ chương trình đến nguồn dữ liệu để lưu lại. (output)

o Chia làm 2 loại là InputStream (luồng vào) và OutputStream (luồng ra).

InputStream – OutputStream
 Lớp InputStream dùng đọc dữ liệu byte hay mảng byte từ nguồn dữ liệu. Nguồn dữ
liệu có thể là file, chuỗi, hay bộ nhớ mà nó chứa đựng dữ liệu. Nó là 1 abstract cho tất
cả các lớp input kế thừa từ nó.
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

 Lớp OutputStream tương tự như InputStream nhưng ngược lại là nó phục vụ cho việc
ghi dữ liệu.

Hai lớp này định nghĩa những thao tác truy xuất dữ liệu cơ bản theo từng byte vật lý
mà không phân biệt nguồn dữ liệu là loại gì. Các lớp kế thừa từ hai lớp này nhằm cụ
thể hóa các dòng nhập xuất byte tùy theo tình huống.

Các phương thức thông dụng

Phương thức cho Mô tả


InputStream
read() Đọc dữ liệu. Có các hàm nạp chồng để đọc 1 byte,
mảng byte, mảng byte từ vị trí này đến vị trí kia
available() Tổng số byte của luồng
close() Đóng luồng

Phương thức cho Mô tả


OutputStream
write() Ghi dữ liệu. Có các hàm nạp chồng để ghi 1 byte,
mảng byte, mảng byte từ vị trí này đến vị trị kia.
flush() Ép dữ liệu từ luồng ghi ra nguồn.
close() Đóng luồng

FileInputStream – FileOutputStream
 Hai lớp này cho phép đọc và ghi trên một tập tin dưới dạng một Stream.
 Các đối tượng của lớp này được tạo ra nhờ một chuỗi đường dẫn đến tập tin, đối
tượng File hoặc đối tượng File Descriptor làm đối số.

Thư mục Assets


 Thư mục này cũng có thể dùng để lưu trữ dữ liệu và dùng InputStream để đọc ra.
 Nó là dạng chỉ đọc, tức là dữ liệu phải được chép vào thư mục này trước, khi chạy chỉ
có thể đọc ra không ghi vào được.
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

Bài tập thực hành


Bài 1: Viết chương trình đọc file từ Assets

Yêu cầu:

 Truy xuất để đọc dữ liệu từ thư mục Assets

Hướng dẫn:

 Chép file (hoặc tạo) cadao.txt vào thư mục Assets.


 Truy xuất file như sau:

Bài 2: Viết chương trình đọc dữ liệu từ file và ghi dữ liệu xuống file

Yêu cầu:

 Nhấn vào nút “Clear all” dữ liệu trên textView được xóa sạch.
 Nhấn vào nút “Write” dữ liệu trên textView sẽ được lưu xuống file dulieu.txt
 Nhấn vào nút “Load” dữ liệu sẽ được nạp lên textView.

Gợi ý:
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

 Lệnh cho nút “Clear all”:

 Lệnh cho nút “Write”:

 Lệnh cho nút “Load”:

Bài 3: Nâng cao - Xây dựng chương trình đơn giản minh họa ghi nhớ 3 người có điểm số
cao nhất trong danh sách High Scores

Yêu cầu:

 Xây dựng giao diện cho phép nhập tên và điểm số người chơi, xuất danh sách 3
người chơi có điểm cao nhất và được sắp thứ tự giảm dần.
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

 Nếu người chơi có điểm số nhỏ hơn cả 3 người chơi có điểm số cao nhất trước đó
thì sẽ không được đưa vào danh sách High Scores
 Ngược lại thì người chơi sẽ được đưa vào danh sách, và người chơi có điểm cao
thứ 3 trước đó sẽ bị loại ra khỏi danh sách High Scores.
 Khi ứng dụng bị đóng, danh sách High Scores vẫn được lưu lại, lần sau mở
chương trình lên ta vẫn thấy 3 người trong High Score của lần chạy trước.

Hướng dẫn:

Khai báo 2 mảng:

 String[] hoten = new String[4] ;


 int[] diemso = new int[4] ;

V. DataStorage
DataStorage
Android cung cấp một vài tùy chọn cho phép bạn lưu trữ dữ liệu. Bạn chọn phương
pháp nào phụ thuộc vào từng nhu cầu cụ thể. Ví dụ như dữ liệu lưu cho riêng chương
trình hay cho phép chương trình khác cũng có thể lưu trữ.

Các tùy chọn lưu trữ:

 Shared Preferences: Lưu các dữ liệu cơ bản theo cặp key-value.


 Internal Storage: Lưu trữ dữ liệu riêng tư trên bộ nhớ thiết bị.
 External Storage: Lưu trữ dữ liệu công cộng trên shared external storage.
 SqlLite Database: Lưu trữ dữ liệu có cấu trúc trong cơ sở dữ liệu riêng tư.
 Network Connection: Lưu trữ dữ liệu trên web với network server của bạn.

Shared Preferences
 Cho phép đọc ghi những kiểu dữ liệu cơ bản theo cặp key-value.
 Những kiểu cơ bản dùng được là: boolean, float, int, long, string.
 Dữ liệu sẽ được lưu xuyên suốt các phiên làm việc ngay cả khi chương trình bị
dừng.

Để lấy đối tượng Shared Preferences dùng một trong hai phương thức:

o getSharedPreferences(): dùng khi muốn có nhiều file tham chiếu được định
nghĩa bởi tên.
o getPreferences(): dùng khi chỉ cần 1 file tham chiếu trong Activity
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

Để ghi dữ liệu:

1. Call edit() to get a SharedPreferences.Editor.


2. Ghi dữ liệu với các phương thức như putBoolean() , putString() …
3. Chấp nhận việc ghi với hàm commit().

Để đọc dữ liệu:

o Dùng các phương thức như getBoolean() , putString() … của


SharedPreferences.

Internal Storage
 Ta có thể lưu file trực tiếp vào bộ nhớ trong (internal storage) của thiết bị.
 Mặc định file được lưu trong internal storage là dùng riêng cho ứng dụng và không
cho phép các chương trình khác truy cập.
 Khi uninstall chương trình, những file internal storage của chương trình sẽ bị xóa
theo

Để ghi dữ liệu:

1. Gọi openFileOutput() với tên file và mode. Nó trả về một FileOutputStream.


2. Ghi file với write() .
3. Đóng stream với close() .

Vd:

Để đọc dữ liệu:

1. Gọi openFileInput() và truyền tên file để đọc. Nó trả về một FileInputStream


2. Đọc các byte với read() .
3. Đóng stream với close() .
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

Mode
Chế độ mở file (mở file theo kiểu gì, để làm gì, quyền ra sao).

 MODE_PRIVATE: Tạo file hoặc thay thế file có cùng tên đang tồn tại và làm nó
thành dùng riêng cho chương trình.
 MODE_APPEND: Tạo file mới để viết vào hoặc viết nối thêm vào nếu file đang
tồn tại và có dữ liệu.
 MODE_WORLD_READABLE: Cho phép các chương trình khác có thể đọc dữ
liệu từ file.
 MODE_WORLD_WRITEABLE: Cho phép các chương trình khác có thể ghi dữ
liệu lên file.

Tham khảo thêm 1 số hàm:

 getFilesDir() : Trả về đường dẫn tuyệt đối của các internal file đã lưu.
 getDir() : Tạo (hay mở) một thư mục bên trong internal storage.
 deleteFile() : Xóa file được lưu trong internal storage.
 fileList() : Trả về mảng những file được lưu bởi chương trình hiện tại.

External Storage
 Mỗi thiết bị tương thích Android đều hỗ trợ một “external storage” cho phép ta lưu
file vào đó.
 Nó có thể là một thiết bị lưu trữ rời (removable storage media) ví dụ như thẻ SD hay
là một internal (non-removable) storage
 Một file được lưu external storage là công cộng, ai cũng có thể đọc ghi thậm chí là
biến mất (lấy thẻ SD ra) nên lưu trên external storage là không an toàn trong một số
trường hợp.

Cấp quyền và Kiểm tra External Storage đã sẵn sàng chưa


Đầu tiên phải cấp quyền được ghi trong Manifest

Do không biết External Storage đang ở tình trạng hiện tại như thế nào do đó khi làm
việc với nó ta luôn phải gọi hàm getExternalStorageState() để kiểm tra xem đã sẵn
sàng chưa.
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

Truy cập file trên external storage


 Dùng API Level 8 trở lên dùng getExternalFilesDir() để mở một File. Có thể truyền
thêm đối số chỉ đến loại thư mục con mà ta cần vd: DIRECTORY_MUSIC,
DIRECTORY_RINGTONES… để null là truy xuất đến root. Bằng cách chỉ ra loại
thư mục, ta chắc chắn được Media scanner của Android sẽ phân loại đúng (ví dụ:
ringtones là ringtones không phải là music).
 Dùng API Level 7 trở xuống dùng getExternalStorageDirectory() để mở một File.

Lưu File và chia sẻ


Nếu muốn lưu file có thể dùng chung ,không bị mất khi khi chương trình bị uninstall thì
ta phải lưu chúng vào các thư mục dùng chung. Các thư mục này nằm ở root của external
storage vd: Music/, Pictures/, Ringtones….

Dùng API Level 8 trở lên getExternalStoragePublicDirectory() và truyền vào loại thư
mục dùng chung mà bạn muốn DIRECTORY_MUSIC,
DIRECTORY_PICTURES,DIRECTORY_RINGTONES . Thư mục này sẽ được tạo nếu
cần.

Dùng API Level 7 trở xuống getExternalStorageDirectory() để mở File và lưu vào các
thư mục:

 Music/ - Media scanner xem các file ở đây như music.


 Podcasts/ - Media scanner xem các file ở đây như podcast.
 Ringtones/ - Media scanner xem các file ở đây như ringtone (nhạc chuông).
 Alarms/ - Media scanner xem các file ở đây như alarm sound (chuông báo thức).
 Notifications/ - Media scanner xem các file ở đây như notification sound (âm
thông báo).
 Pictures/ - Tất cả hình ảnh (trừ những hình chụp bằng camera).
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

 Movies/ - Tất cả đoạn phim (trừ quay bằng camcorder).


 Download/ - Các downloads linh tinh.

BÀI TẬP THỰC HÀNH


Bài 1: Viết chương trình dùng Shared Preferences để đọc ghi dữ liệu đơn giản.

Hướng dẫn:

Đọc dữ liệu:

Ghi dữ liệu:

Bài 2: Viết chương trình tạo File và ghi vào Internal Storage. Kiểm tra sự tồn tại của File
trong Internal Storage

Yêu cầu:

 Chương trình đơn giản ghi dữ liệu vào file đặt tên dulieu.txt (bài trước chính là
Internal Storage).
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

 Kiểm tra để biết file đã được lưu ở đâu, tại sao gọi là Internal Storage.

Hướng dẫn

 Viết file đơn giản:

 Kiểm tra sự tồn tại của file:

Bài 3: Viết chương trình Android đọc file danhngon.txt, hiển thị ngẫu nhiên ra màng hình
từng câu danh ngôn khi touch lên màng hình.
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

Yêu cầu:

 Chọn lựa nơi lưu trữ cho file danhngon.txt.


 Đọc cấu trúc file danhngon.txt và tìm cách ngắt câu.
 Trên đầu màng hình hiển thị số câu hiện tại / tổng số câu.
 Bên dưới hiển thị 1 câu ngẫu nhiên.

Hướng dẫn:

 Chép file danhngon.txt vào thư mục assets (có thể chọn cách lưu trữ khác). Đọc ra
InputStream.
 Từ InputStream ghi vào mảng byte rồi ghi ra chuỗi.
 Cắt chuỗi thành mảng chuỗi.
 Override lên onTouchEvent ().
 Tạo số ngẫu nhiên. Lấy câu ra và xuất lên TextView. Xuất lên 1 TextView khác tổng
số câu và câu hiện tại.

Bài 4: Nâng cao – Viết chương trình Truyện Cười đọc file truyencuoi.txt. Và hiện thị ra
màng hình từng câu chuyện.
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

Yêu cầu:

 Tiêu đề chuyện màu đỏ.


 Nội dung truyện có màu xanh.
 Trên cùng giao diện có 4 button: “Đầu”, “Trước”, “ Sau”, Cuối cho phép duyệt xem
từng truyện.
 Nếu là truyện đầu tiên thì 2 nút “Đầu”, “Cuối” bị disable, nếu là truyện cuối cùng thì
2 nút “Trước”, “Sau” bị disable.
 Sau khi xong, thử sửa lại không disable các nút mà cho các truyện xoay vòng.

Bài 5: Viết chương trình tạo File và ghi vào External Storage. Kiểm tra sự tồn tại của File
trong External Storage
CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

Yêu cầu:
 Viết một một hàm tên kiemtrathenho()
dùng kiểm tra tình trạng thẻ nhớ, trả về
o 0: không đọc / không ghi
o 1: chi đọc
o 2: đọc được / ghi được
 Nếu đọc ghi được, lưu vào file test.txt và
đọc ra để hiển thị.
 Kiểm tra để biết file đã được lưu ở đâu,
tại sao gọi là External Storage.

Hướng dẫn:

 Phần kiểm tra và phân quyền (xem lý thuyết).


 Ghi file:

 Đọc file:

 Kiểm tra sự tồn tại của file:


CHUYÊN ĐỀ LẬP TRÌNH DI ĐỘNG HK 2 (2019-2020)

Bài 7: Đọc file ảnh, hình, mp3 từ thẻ nhớ

Yêu cầu:

 Dùng DDMS (Dalvik Debug Monitoring Service) chép 1 số file hình ảnh, mp3,
video vào thẻ nhớ của máy giả lập.
 Xây dựng lần lượt các ứng dụng Android đơn giản:
o Hiển thị các hình ảnh từ thẻ nhớ.
o Play 1 file mp3 từ thẻ nhớ.
o Play 1 video từ thẻ nhớ.

You might also like