本文的目标是学习安卓系统的文件的读取和写入。
步骤如下:
1.界面设计:
如上所示,界面包含2个TextView分别用来提示用户写入文件的名称和文件内容,并且用于显示读取的文件的名称和内容。
界面的代码如下:
<LinearLayout 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:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/inputfilename" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入文件名:"
android:id="@+id/filename"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/inputcontent" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入文件内容:"
android:minLines="3"
android:id="@+id/content"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/save"
android:text="@string/save"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/read"
android:text="@string/read"/>
</LinearLayout>
2.功能实现:
2.1文件读写类的实现:
package pub.tobest.fileoprator;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
import android.util.Log;
public class FileService {
private Context context;
/**
* @param fileName
* @param content
* @throws IOException
*/
public void save(String fileName, String content,Context context) throws IOException {
// TODO Auto-generated method stub
this.context=context;
FileOutputStream out=context.openFileOutput(fileName, Context.MODE_APPEND);
byte[] buffer=content.getBytes();
out.write(buffer);
}
public String read(String fileName)throws Exception{
FileInputStream input=new FileInputStream(new File(fileName));
ByteArrayOutputStream byteInput=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=0;
while((length=input.read(buffer))!=-1){
byteInput.write(buffer,0,length-1);
}
String str=new String(byteInput.toByteArray());
byteInput.close();
input.close();
Log.d("123", str+"______123");
return str;
}
}
2.2文件的读写:
package pub.tobest.fileoprator;
import java.io.FileNotFoundException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
public class MainActivity extends Activity {
EditText fileNameEditText;
EditText contentEditText;
Button saveButton;
Button readButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
// TODO Auto-generated method stub
fileNameEditText=(EditText) findViewById(R.id.filename);
contentEditText=(EditText) findViewById(R.id.content);
//写入
saveButton=(Button) findViewById(R.id.save);
saveButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String fileName=fileNameEditText.getText().toString();
String content=contentEditText.getText().toString();
FileService service=new FileService();
try {
service.save(fileName,content,getApplicationContext());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getApplicationContext(), "文件保存失败", Toast.LENGTH_SHORT).show();
}
Toast.makeText(getApplicationContext(), "文件保存完成", Toast.LENGTH_SHORT).show();
}
});
//读取
readButton=(Button) findViewById(R.id.read);
readButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String fileName=fileNameEditText.getText().toString();
FileService service=new FileService();
try {
fileName=MainActivity.this.getApplicationContext().getFilesDir()+"/123";
fileNameEditText.setText(fileName);
contentEditText.setText(service.read(fileName));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getApplicationContext(), "文件读取失败", Toast.LENGTH_SHORT).show();
}
Toast.makeText(getApplicationContext(), "文件读取完成", Toast.LENGTH_SHORT).show();
}
});
}
}
3.总结
如上所示,文件的读写主要使用到javase中的File类、FileInputStream类和FileOutputStream类。