在本篇博客中,我们要实现在Android中“新建文件”和“读取文件”:
目标界面:
在输入文件名称之后,输入文件内容,点击保存,可以保存成为一个文档
首先,我们先建立一个Android Project项目,项目名称:File。
然后,我们需要先实现目标视图中的界面:
编辑strings.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, FileActivity!</string>
<string name="app_name">文件操作</string>
<string name="filename">文件名称</string>
<string name="filecontent">文件内容</string>
<string name="button">保存</string>
<string name="success">保存完成</string>
<string name="fail">保存失败</string>
</resources>编辑:main.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/filename" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/filename"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/filecontent"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/filecontent"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:id="@+id/button"
/>
</LinearLayout>由此,我们就把界面构造完成了,接下来就是编写java代码(关于界面编写过程不再详细说明)。
然后,我们要编辑FileActivity.java(代码具体解释在程序中):
package cn.itcast.files;
import cn.itcast.fservice.FileService;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class FileActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); //实现布局页面的跳转
Button button = (Button)this.findViewById(R.id.button); //获取Button属性
button.setOnClickListener(new ButtonClickListener()); //为Button设置监听器
}
/**
* Button点击事件监听器实现
* @author hc
*
*/
private final class ButtonClickListener implements View.OnClickListener{
@Override
public void onClick(View v) { //生成默认的方法
EditText filenameText = (EditText)findViewById(R.id.filename); //获得“文件名称”输入框对象
EditText contentText = (EditText)findViewById(R.id.filecontent); //获得“文件内容”输入框对象
String filename = filenameText.getText().toString(); //获得输入的“文件名称”
String content = contentText.getText().toString(); //获得输入的“文件内容”
//new一个FileService对象,getApplicationContext()返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
FileService service = new FileService(getApplicationContext());
try {
service.save(filename,content); //调用save()方法保存文件
Toast.makeText(getApplicationContext(), R.string.success, 1).show(); //调用一个Toast呈现一个“保存完成”的消息
} catch (Exception e) {
Toast.makeText(getApplicationContext(), R.string.fail, 1).show(); //调用Toast对象呈现一个“保存失败”的消息
e.printStackTrace();
}
}
}
}
因此,我们需要建立一个FileService.java类:
package cn.itcast.fservice;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
public class FileService {
private Context context;
public FileService(Context context) {
super();
this.context = context;
}
/**
* 写入文件和关闭文件
* @param content 写入内容
* @param outStream 输出流
* @throws IOException
*/
private void write(String content, FileOutputStream outStream)
throws IOException {
outStream.write(content.getBytes());
outStream.close();
}
/**
* 保存文件
* @param filename 文件名称
* @param content 文件内容
* @throws Exception
*/
public void save(String filename, String content) throws Exception {
//私有操作模式:创建出来的文件只能被本应用访问,其他应用无法访问该文件。
//另外采用私有操作模式创建的文件,写入文件中的内容会覆盖源文件内容
FileOutputStream outStream = context.openFileOutput(filename,Context.MODE_PRIVATE); //采用私有操作模式打开输出流
write(content, outStream);
}
/**
* 读取文件内容
* @param filename 文件名称
* @return 文件内容
* @throws Exception
*/
public String read(String filename)throws Exception{
FileInputStream inStream = context.openFileInput(filename);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
//读完返回-1,未读完返回读了多少数据
while((len = inStream.read(buffer)) != -1){
outStream.write(buffer, 0 , len);
}
byte[] data = outStream.toByteArray();
return new String(data);
}
}
可以看到,我们文件已经是保存完成了,在这里我们需要找到这个文件被保存在了哪里。
首先,我们需要打开File Explorer视图:
我们可以在data—>data—>cn.itcast.files(这个是工程所在的包)—>files这个目录下边,找到Test.txt文件,然后我们把它导出到桌面
可以看到里边的内容就是我们输入的内容。
说到这里,文件的保存已经介绍完毕了,接下来我们要介绍一下文件的读取:
我们需要建立一个测试文件,建立测试文件需要首先配置AndroidManifest.xml(关于这个文件的配置请见Android开发系列(四),这就就不再继续配置了)
我们建立一个测试类:FileServiceTest.java(继承AndroidTestCase类):
package cn.itcast.test;
import cn.itcast.fservice.FileService;
import android.test.AndroidTestCase;
import android.util.Log;
public class FileServiceTest extends AndroidTestCase {
private static final String TAG = "FileServiceTest"; //设置一个TAG
public void testRead() throws Throwable{
FileService service = new FileService(this.getContext());
String result = service.read("Test.txt"); //读取文件Test.txt
Log.i(TAG, result); //把得到的文件的内容result交给TAG。然后我们就可以在LogCat界面中查看得到了
}
}
可以查看如下:
Android开发系列(五):Android应用中文件的保存与读取
原文地址:http://blog.csdn.net/u010800530/article/details/39139521