完成如下图所示的效果图:
其主要功能有:1.点击保存按钮后会将文件的内容保存到此文件名的文件中。
2. 点击读取按钮前,先确定要读取文件的名称,点击后会将此文件中的文件内容读入到文件内容下的文本框。
注意:当想把存储的文件导出时,如果是中文内容那么会出现Failed to pull selection错误,若内容和名称均为英文将会导出成功。
首先,先对此页面进行布局,在activity_file_stream.xml中的代码如下:
<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" >
<!-- 文件名称 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/name"
android:textSize="20dip"
tools:context=".FileStreamActivity" />
<!-- 输入文件名称 -->
<EditText
android:id="@+id/inputname"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:inputType="text" />
<!-- 文件内容 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/context"
android:textSize="20dip" />
<!-- 输入文件内容 -->
<EditText
android:id="@+id/inputcontent"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:focusable="true"
android:inputType="text" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<!-- 保存按钮 -->
<Button
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save" />
<!-- 读取按钮 -->
<Button
android:id="@+id/read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/read" />
</LinearLayout>
</LinearLayout>
其次编写业务层 FileService.java。代码如下:
package com.bzu.filestream.service;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
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;
}
/*
* 保存文件内容
*/
public void save(String fileName,String content) throws Exception{
FileOutputStream fos;
fos=context.openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
}
/*
* 从文件中读取内容
*/
public String read(String FileName) throws IOException{
FileInputStream fis=context.openFileInput(FileName);
int len=0;
byte[] buffer=new byte[1024];
// 往内存中输出数据的
ByteArrayOutputStream baos=new ByteArrayOutputStream();
// 如果数据量很大,第2次读取的数据有可能会把第1次读取的数据给覆盖掉
while((len=fis.read(buffer))!=-1){
baos.write(buffer,0,len);
}
// 得到内存中的数据 以二进制存放的
byte[] data=baos.toByteArray();
baos.close();
fis.close();
// 根据二进制数据转换成所对应的字符串
return new String(data);
}
}
最后,编写主要的Activity(FileStreamActivity.java),代码如下:
package com.bzu.filestream.activity;
import com.bzu.filestream.service.FileService;
import android.os.Bundle;
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;
import android.widget.Toast;
public class FileStreamActivity extends Activity {
private EditText name;
private EditText content;
private Button save;
private Button read;
FileService fileService=new FileService(FileStreamActivity.this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_stream);
name=(EditText)this.findViewById(R.id.inputname);
content=(EditText)this.findViewById(R.id.inputcontent);
save=(Button) this.findViewById(R.id.save);
read=(Button) this.findViewById(R.id.read);
// 点击保存按钮,完成保存功能
save.setOnClickListener(new ButtonHandle1());
// 点击读取按钮,完成读取内容的功能
read.setOnClickListener(new ButtonHandle2());
}
/*
* 处理保存按钮点击事件
*/
private class ButtonHandle1 implements OnClickListener{
public void onClick(View v) {
// 存放页面组件传来的内容
String fileName=name.getText().toString();
String fileContent=content.getText().toString();
try {
fileService.save(fileName, fileContent);
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "保存成功!", Toast.LENGTH_LONG).show();
}
}
/*
* 处理读取按钮点击事件
*/
private class ButtonHandle2 implements OnClickListener{
public void onClick(View v) {
// 存放页面组件传来的内容
String fileName=name.getText().toString();
try {
content.setText(fileService.read(fileName));
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "读取成功!", Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_file_stream, menu);
return true;
}
}