android应用把文件存放在SDCard

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();
 }

 

转载于:https://my.oschina.net/u/273709/blog/87852

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值