1、在程序中访问SDCard,你需要申请访问SDCard的权限
在AndroidManifest.xml中加入访问SDCard的权限如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.example.files"
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="org.example.files" android:label="Test for my App"/>
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
2、在MainActivity.java中代码如下:
package org.example.files;
import org.example.service.FileService;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//根据按钮的ID找到按钮
Button button = (Button) this.findViewById(R.id.button);
//把ButtonClickListener对象new出来
button.setOnClickListener(new ButtonClickListener());
}
//创建一个内部类,这个内部类继承了OnClickListener这个接口
private final class ButtonClickListener implements View.OnClickListener
{
public void onClick(View v) {
//首先找到文件名称这个输入框
EditText filenameText = (EditText) findViewById(R.id.filename);
//再找到文件内容这个输入框
EditText contentText = (EditText) findViewById(R.id.filecontent);
//从文件名称输入框中得到文件名称的内容
String filename = filenameText.getText().toString();
String content = contentText.getText().toString();
//通过业务类保存文件的内容,实例化业务类
FileService service = new FileService(getApplicationContext());
//保存文件内容
try {
//判断SDCard是否存在,可以读写就把文件数据保存在SDCard里
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
service.saveToSDCard(filename,content);
//通过Toast方法获取信息调用show方法把提示结果信息显示出来
Toast.makeText(getApplicationContext(), R.string.success, 1).show();
}else
{
//否则提示SDCard不存在或写保护
Toast.makeText(getApplicationContext(), R.string.sdcarderror, 1).show();
// //把数据保存到手机
// service.save(filename,content);
// //通过Toast方法获取信息调用show方法把提示结果信息显示出来
// Toast.makeText(getApplicationContext(), R.string.success, 1).show();
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), R.string.fail, 1).show();
e.printStackTrace();
}
}
}
}
3、在FileService.java中代码如下:
public class FileService {/**
* (文件的IO技术)提供上下文对象
*/
private Context context;
/**
* 通过构造器给context赋值
*/
public FileService(Context context) {
this.context = context;
}
/**
* 保存文件数据到SDCard上
* @param filename
* @param content
* @throws Exception
*/
public void saveToSDCard(String filename, String content) throws Exception
{
// //定义一个文件的构造器,保存在SDCard绝对路径目录为/mnt/sdcard,文件名称为filename.
// File file = new File(new File("/mnt/sdcard"),filename);
//从API中获取SDCard的路径,解决各种Android系统的兼容性问题
File file = new File(Environment.getExternalStorageDirectory(),filename);
//因为默认储存在手机上,所以要新建一个文件的输出流
FileOutputStream outStream = new FileOutputStream(file);
//把字符串传化为二进制数据写入到文件中
outStream.write(content.getBytes());
//然后关掉这个流
outStream.close();
}