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

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



