像写日志那样保存内容很多的存储时,再像之前那样就不方便了。利用文件把数据存储起来方便存储更方便读取。
下面就是一个例子:
输入内容并保存,可以在/data/data/<package name>/files目录找到,如:
把这个文件导出到桌面或其他地方就可以看了:
这样保存的文件就显示出来了。
现在看看步骤吧:
一 布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="#080101"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2px"
android:text="文件名称:"
tools:context=".MainActivity" />
<EditText
android:id="@+id/filename"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文件内容:" />
<EditText
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxLines="5"//定义显示行数(最多5行)
android:gravity="top"//光标初始在顶端,也就是说从顶部开始输入
android:scrollbars="vertical" />
<Button
android:id="@+id/storage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存" />
</LinearLayout>
二 String文件添加注释:
<resources>
<string name="app_name">Store01</string>
<string name="hello_world">Hello world!</string>
<string name="menu_settings">Settings</string>
<string name="title_activity_main">存储文件</string>
<string name="success">保存成功!</string>
<string name="faults">出现错误,保存失败!</string>
</resources>
三 MainActivity中心文件:
public class MainActivity extends Activity {
private EditText fileNameText;
private EditText contentText;
private Button save;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fileNameText=(EditText) this.findViewById(R.id.filename);
contentText=(EditText) this.findViewById(R.id.content);
save=(Button) this.findViewById(R.id.storage);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {//点击“保存”,将文件存储起来
String fileName=fileNameText.getText().toString();
String content=contentText.getText().toString();
FileService fileService=new FileService(MainActivity.this);
try{
fileService.saveFile(fileName,content);
Toast.makeText(MainActivity.this, R.string.success, Toast.LENGTH_LONG).show();
}catch(IOException e){
Toast.makeText(MainActivity.this, R.string.faults, Toast.LENGTH_LONG).show();
System.out.println(e.getMessage());
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
四 业务层 FileService
public class FileService {
private Context context;
public FileService(Context context) {
super();
this.context = context;
}
public void saveFile(String filename, String content) throws Exception {
FileOutputStream fos;
fos = context.openFileOutput(filename, Context.MODE_PRIVATE);//这里要注意Context不要写错,一开始写成小写的结果内容没存上!
fos.write(content.getBytes());
fos.close();
}
public String readFile(String filename) throws IOException {//从文件中读取内容
FileInputStream fis = context.openFileInput(filename);
byte[] buffer = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len;
while ((len = fis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
baos.close();
fis.close();
return new String(baos.toByteArray());
}
}
五 FileService的测试文件:
public class FileServiceTest extends AndroidTestCase {
public void testSave() throws Exception{
FileService fileService=new FileService(getContext());
fileService.saveFile("hello.txt","今天真高兴");
}
public void testRead() throws IOException {
FileService fileService=new FileService(getContext());
String s=fileService.readFile("a.txt");//注意这些划线部分,文件格式都是txt格式的,不然存储文件就导不出去
System.out.println(s);
}
}
在添加测试文件时,在AndroidManifest.xml中要做以下更改(划线部分代码准确无误的添加进去):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="w3.dyp.store01"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-library android:name="android.test.runner" />
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="w3.dyp.store01" >
</instrumentation>
</manifest>