数据的存储和访问
DataActivity
package org.wp.file;
import java.io.InputStream;
import java.io.OutputStream;
import org.wp.service.FileService;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class DataActivity extends Activity {
private static final String TAG = "DataActivity";
private EditText filenameText;
private EditText contentText;
private TextView resultView;
private Button saveButton;
private Button readButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
filenameText = (EditText) this.findViewById(R.id.filename);
contentText = (EditText) this.findViewById(R.id.content);
resultView = (TextView) this.findViewById(R.id.result);
saveButton = (Button) this.findViewById(R.id.save);
readButton = (Button) this.findViewById(R.id.read);
saveButton.setOnClickListener(listener);
readButton.setOnClickListener(listener);
}
private View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Button button = (Button) arg0;
String filename = filenameText.getText().toString();
switch (button.getId()) {
case R.id.save:
int resId = R.string.success;
String content = contentText.getText().toString();
try {
OutputStream outStream = DataActivity.this.openFileOutput(
filename, Context.MODE_PRIVATE);
FileService.save(outStream, content);
} catch (Exception e) {
Log.e(TAG, e.toString());
resId = R.string.error;
}
Toast.makeText(DataActivity.this, resId, Toast.LENGTH_LONG).show();
break;
case R.id.read:
try {
InputStream inStream = DataActivity.this.openFileInput(filename);
String text = FileService.read(inStream);
resultView.setText(text);
} catch (Exception e) {
Log.e(TAG, e.toString());
Toast.makeText(DataActivity.this, "读取失败",
Toast.LENGTH_LONG).show();
}
break;
}
}
};
}
FileService
package org.wp.service;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class FileService {
/**
* 保存数据
*
* @param outStream
* @param content
* @throws Exception
*/
public static void save(OutputStream outStream, String content)
throws Exception {
outStream.write(content.getBytes());
outStream.close();
}
/**
* 读取数据
*
* @param inStream
* @return
* @throws Exception
*/
public static String read(InputStream inStream) throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
outStream.close();
inStream.close();
return new String(data);
}
}
FileServiceTest
package org.wp.file;
import java.io.InputStream;
import java.io.OutputStream;
import org.wp.service.FileService;
import android.content.Context;
import android.test.AndroidTestCase;
import android.util.Log;
/**
* Context.MODE_PRIVATE
* 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,
* 在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中
* 可以使用Context.MODE_APPEND
*
* Context.MODE_APPEND
* 该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
*
* Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
* MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。
* MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
*
* 如果希望文件被其他应用读和写,可以传入:
* openFileOutput("wp.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
*
* Context.MODE_PRIVATE = 0
* Context.MODE_APPEND = 32768
* Context.MODE_WORLD_READABLE = 1
* Context.MODE_WORLD_WRITEABLE = 2
*
* 创建的文件保存在/data/data/<package name>/files目录
* 查看文件 Window ==> Show View ==> Other ==> Android ==> File Explorer
*
* @author wp
*
*/
public class FileServiceTest extends AndroidTestCase {
private static final String TAG = "FileServiceTest";
public void testSave() throws Exception {
OutputStream outStream = this.getContext().openFileOutput("wp.txt",
Context.MODE_PRIVATE);
FileService.save(outStream, "Android test");
}
public void testRead() throws Exception {
InputStream inStream = this.getContext().openFileInput("wp.txt");
String content = FileService.read(inStream);
Log.i(TAG, content);
}
}
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"
>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/filename"
android:id="@+id/filenameLable"
/>
<EditText
android:layout_width="200px"
android:layout_height="wrap_content"
android:layout_alignTop="@id/filenameLable"
android:layout_toRightOf="@id/filenameLable"
android:layout_marginLeft="10px"
android:text="wp.txt"
android:id="@+id/filename"
/>
</RelativeLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/content"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minLines="3"
android:id="@+id/content"
/>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save"
android:id="@+id/save"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/read"
android:layout_toRightOf="@id/save"
android:layout_alignTop="@id/save"
android:id="@+id/read"
/>
</RelativeLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/result"
/>
</LinearLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, DataActivity!</string> <string name="app_name">数据保存</string> <string name="filename">文件名称</string> <string name="content">文件内容</string> <string name="save">保存</string> <string name="read">读取文件内容</string> <string name="success">保存成功</string> <string name="error">保存失败</string> </resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.wp.file" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="android.test.runner" /> <activity android:name=".DataActivity" 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> <uses-sdk android:minSdkVersion="7" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="org.wp.file" android:label="Tests for My App" /> </manifest>
本文介绍了一个简单的Android应用程序,用于实现文件的存储和读取功能。通过DataActivity类,用户可以输入文件名和内容,然后选择保存或读取。利用FileService类提供的方法进行文件操作。
1万+

被折叠的 条评论
为什么被折叠?



