Android学习笔记(四)

SDCard数据存取
本文介绍了一个简单的Android应用,用于实现SDCard上的文件读写操作。应用包括文件名及内容输入框,通过按钮触发文件保存或读取操作。代码展示了如何检查SDCard状态并进行数据的保存与读取。

SDCard数据访问

DataActivity

package org.wp.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.wp.service.FileService;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 
 * Activity还提供了getCacheDir()和getFilesDir()方法:
 * getCacheDir()方法用于获取/data/data/<package name>/cache目录
 * getFilesDir()方法用于获取/data/data/<package name>/files目录
 * 
 * <!-- 在SDCard中创建与删除文件权限 -->
 * <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
 * <!-- 往SDCard中写入数据权限 -->
 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 * 
 * DOS下创建SDCard
 * 进入Android SDK安装路径的tools目录
 * 文件后缀可以随便取
 * 建议使用.img
 * mksdcard 2048M D:\AndroidTool\sdcard.img
 * 
 * @author wp
 *
 */

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();
			File file = new File(Environment.getExternalStorageDirectory(),
					filename);
			// File file = new File("/sdcard" + filename);
			// Environment.getExternalStorageDirectory();

			switch (button.getId()) {
			case R.id.save:
				// SDCard存在,并且可以进行读写
				if (Environment.getExternalStorageState().equals(
						Environment.MEDIA_MOUNTED)) {
					int resId = R.string.success;
					String content = contentText.getText().toString();
					try {
						FileOutputStream outStream = new FileOutputStream(file);
						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();
				} else {
					Toast.makeText(DataActivity.this, "SDCard不存在或者写保护",
							Toast.LENGTH_LONG).show();
				}
				break;
			case R.id.read:
				try {
					InputStream inStream = new FileInputStream(file);
					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);
	}
}

 

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" />
	<!-- 在SDCard中创建与删除文件权限 -->
	<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
	<!-- 往SDCard中写入数据权限 -->
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>  

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值