使用文件进行数据存储

像写日志那样保存内容很多的存储时,再像之前那样就不方便了。利用文件把数据存储起来方便存储更方便读取。

下面就是一个例子:

  

输入内容并保存,可以在/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>


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值