Android学习笔记(三)

本文介绍了一个简单的Android应用程序,用于实现文件的存储和读取功能。通过DataActivity类,用户可以输入文件名和内容,然后选择保存或读取。利用FileService类提供的方法进行文件操作。

数据的存储和访问

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> 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值