Bạn xem cấu trúc XML của giao diện (activity_main.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:id="@+id/btnreaddata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
<EditText
android:id="@+id/editdata"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="2"
android:ems="10"
android:gravity="top|left"
android:inputType="textMultiLine" >
<requestFocus />
</EditText>
Đây là source code để đọc Resource File:
- Bạn chỉ cần copy đoạn code này vào sự kiện của nút đọc là xong:
public void readData()
{
String data;
InputStream in= getResources().openRawResource(R.drawable.myfile);
InputStreamReader inreader=new InputStreamReader(in);
BufferedReader bufreader=new BufferedReader(inreader);
StringBuilder builder=new StringBuilder();
if(in!=null)
{
try
{
while((data=bufreader.readLine())!=null)
{
builder.append(data);
builder.append("\n");
}
in.close();
editdata.setText(builder.toString());
}
catch(IOException ex){
Log.e("ERROR", ex.getMessage());
}
}
}
Ở đây Tôi không cung cấp source nguồn, vì nó chỉ có 1 hàm xí xi đó. Các bạn chỉ cần thiết kế giao diện cho giống như XML Layout rồi copy code vào sự kiện của nút nhấn là xong.
- Cách đọc tập tin trong Android y chang như trong Java thuần túy, ở đây bạn chỉ để ý dòng lệnh số 4:
InputStream in= getResources().openRawResource(R.drawable.myfile);
Dòng lệnh này để đọc Resource File và trả về InputStream. Khi có InputStream rồi thì mọi xử lý sẽ giống như Java.
* Đọc và ghi tập tin:
- Trường hợp này bạn kéo thả tập tin vào cấu trúc thư mục như hình bên dưới (dùng DDMS):
- Nhìn vào những vệt Tôi tô màu vàng, các bạn kéo thả vào đúng vị trí ứng dụng của bạn.
- XML Resource cho bài tập này:
android:id
=
"@+id/LinearLayout1"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:orientation
=
"vertical"
tools:context
=
".MainActivity"
>
<
Button
android:id
=
"@+id/btnreaddata"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
android:text
=
"Read Data"
/>
<
EditText
android:id
=
"@+id/editdata"
android:layout_width
=
"match_parent"
android:layout_height
=
"0dip"
android:layout_weight
=
"2"
android:ems
=
"10"
android:gravity
=
"top|left"
android:inputType
=
"textMultiLine"
>
<
requestFocus
/>
</
EditText
>
<
Button
android:id
=
"@+id/btnwritedata"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
android:text
=
"Write Data"
/>
</
LinearLayout
>
- XML resource trên sẽ tạo giao diện như hình bên dưới:
- Source Activity
package
tranduythanh.com;
import
java.io.BufferedReader;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.InputStreamReader;
import
java.io.OutputStreamWriter;
import
android.os.Bundle;
import
android.app.Activity;
import
android.util.Log;
import
android.view.Menu;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.EditText;
public
class
MainActivity
extends
Activity
implements
OnClickListener{
Button btnread,btnwrite;
EditText editdata;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnread=(Button) findViewById(R.id.btnreaddata);
btnwrite=(Button) findViewById(R.id.btnwritedata);
editdata=(EditText) findViewById(R.id.editdata);
btnread.setOnClickListener(
this
);
btnwrite.setOnClickListener(
this
);
}
public
void
onClick(View v) {
if
(v.getId()==R.id.btnreaddata)
{
readData();
}
else
if
(v.getId()==R.id.btnwritedata)
{
writeData();
}
}
/**
* Hàm đọc tập tin trong Android
* Dùng openFileInput trong Android để đọc
* ra FileInputStream
*/
public
void
readData()
{
try
{
FileInputStream in= openFileInput(
"myfile.txt"
);
BufferedReader reader=
new
BufferedReader(
new
InputStreamReader(in));
String data=
""
;
StringBuilder builder=
new
StringBuilder();
while
((data=reader.readLine())!=
null
)
{
builder.append(data);
builder.append(
"\n"
);
}
in.close();
editdata.setText(builder.toString());
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
}
/**
* Hàm ghi tập tin trong Android
* dùng openFileOutput để ghi
* openFileOutput tạo ra FileOutputStream
*/
public
void
writeData()
{
try
{
FileOutputStream out=
openFileOutput(
"myfile.txt"
,
0
);
OutputStreamWriter writer=
new
OutputStreamWriter(out);
writer.write(editdata.getText().toString());
writer.close();
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
}
/*
* hàm này là đọc Resource File, Tôi gom chung vào đây
*/
public
void
readData2()
{
String data;
InputStream in= getResources()
.openRawResource(R.drawable.myfile);
InputStreamReader inreader=
new
InputStreamReader(in);
BufferedReader bufreader=
new
BufferedReader(inreader);
StringBuilder builder=
new
StringBuilder();
if
(in!=
null
)
{
try
{
while
((data=bufreader.readLine())!=
null
)
{
builder.append(data);
builder.append(
"\n"
);
}
in.close();
editdata.setText(builder.toString());
}
catch
(IOException ex){
Log.e(
"ERROR"
, ex.getMessage());
}
}
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return
true
;
}
}
- Bạn nhìn vào dòng lệnh 52: FileInputStream in= openFileInput(“myfile.txt”);
Lệnh ở dòng này mở tập tin lên để đọc, nó trả về FileInputStream nên mọi thứ sẽ giống như Java thuần túy.
- Tiếp tục nhìn vào dòng lệnh 78: FileOutputStream out=openFileOutput(“myfile.txt”,0);
Lệnh ở dòng này mở tập tin lên để ghi. đối số thứ 2 Tôi để là số 0 (MODE_PRIVATE) là mặc định. Bạn có thể dùng MODE_APPEND, MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE. Ý nghĩa của mỗi mode bạn có thể lên mạng tìm. Hoặc chỉ cần di chuyển chuột vào hàm trên là eclipse tự giải thích cho các bạn (nếu eclipse bạn đã cài Javadoc).
- Bạn tải source code mẫu phần này ở đây:
2. External Storage:
- Để vừa ghi vừa đọc trên SD Card thì ta phải sử dụng 2 permission bên dưới trongAndroidManifest:
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE” />
- Để lấy được đường dẫn của SD Card ta dùng lệnh:
String sdcard=Environment.getExternalStorageDirectory().getAbsolutePath();
- Sau đó mọi thứ tương tác với tập tin thì y xì như Java thuần túy, ở đây Tôi dùng Scanner để đọc và OutputStreamWriter để ghi.
- Vì vậy giao diện Tôi làm y chang như Internal Storage:
- Bạn tạo Project và kéo thả tập tin vào SD card (dĩ nhiên khi tạo AVD thì bạn phải checked vào using SD card thì mới có). Bạn xem hình để biết cách kéo thả vào SD Card:
Ở hình trên bạn vào DDMS, tới thư mục mnt/ chọn sdcard. Phải chọn cho đúng vì nó có nhiều thư mục cùng tên sdcard, nhưng bạn chọn sdcard ở trong thư mục mnt thôi. Sau đó kéo thả tập tin vào đây là xong.
- XML Resource y xì như phần internal Storage nên Tôi không đưa vào đây, bạn xem Source code Activity:
package
tranduythanh.com;
import
java.io.File;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.OutputStreamWriter;
import
java.util.Scanner;
import
android.os.Bundle;
import
android.os.Environment;
import
android.app.Activity;
import
android.view.Menu;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.EditText;
public
class
MainActivity
extends
Activity
implements
OnClickListener{
Button btnread,btnwrite;
EditText editdata;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnread=(Button) findViewById(R.id.btnreaddata);
btnwrite=(Button) findViewById(R.id.btnwritedata);
editdata=(EditText) findViewById(R.id.editdata);
btnread.setOnClickListener(
this
);
btnwrite.setOnClickListener(
this
);
}
public
void
onClick(View v) {
if
(v.getId()==R.id.btnreaddata)
{
readData();
}
else
if
(v.getId()==R.id.btnwritedata)
{
writeData();
}
}
/*
* đọc từ SD Card
* Environment.getExternalStorageDirectory().getAbsolutePath()
* để lấy đường dẫn trên SD Card
*/
public
void
readData()
{
String sdcard=Environment
.getExternalStorageDirectory()
.getAbsolutePath()+
"/myfile.txt"
;
try
{
Scanner scan=
new
Scanner(
new
File(sdcard));
String data=
""
;
while
(scan.hasNext())
{
data+=scan.nextLine()+
"\n"
;
}
scan.close();
editdata.setText(data+
""
);
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* ghi tập tin trên SD Card
*/
public
void
writeData()
{
String sdcard=Environment
.getExternalStorageDirectory()
.getAbsolutePath()+
"/myfile.txt"
;
try
{
OutputStreamWriter writer=
new
OutputStreamWriter(
new
FileOutputStream(sdcard));
writer.write(editdata.getText()+
""
);
writer.close();
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return
true
;
}
}
Vì có sử dụng Permission nên bạn xem AndroidManifest:
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
package
=
"tranduythanh.com"
android:versionCode
=
"1"
android:versionName
=
"1.0"
>
<
uses-sdk
android:minSdkVersion
=
"14"
android:targetSdkVersion
=
"17"
/>
<
uses-permission
android:name
=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<
uses-permission
android:name
=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<
application
android:allowBackup
=
"true"
android:icon
=
"@drawable/ic_launcher"
android:label
=
"@string/app_name"
android:theme
=
"@style/AppTheme"
>
<
activity
android:name
=
"tranduythanh.com.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
>
Khi thực thi ứng dụng, bạn sẽ có giao diện như trình bày ở trên, với kết quả như mong muốn.
- Bạn có thể tải coding mẫu ở đây:
0 nhận xét:
Đăng nhận xét