对sdcard的一些操作

来源:互联网 发布:Linux改变所有文件权限 编辑:程序博客网 时间:2024/05/01 03:04

获取容量大小以及将文件保存在sdcard中。

获取手机内存的大小:

import java.io.File;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.os.Environment;import android.os.StatFs;import android.text.format.Formatter;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取SD卡File path = Environment.getExternalStorageDirectory();//获取手机内存File data = Environment.getDataDirectory();long [] sd = getInfo(path);long [] phone = getInfo(data);TextView t = (TextView) findViewById(R.id.total);TextView a = (TextView) findViewById(R.id.avilable);t.setText(formatString(sd[0]));a.setText(formatString(sd[1]));t = (TextView) findViewById(R.id.phone_total);a = (TextView) findViewById(R.id.phone_avilable);t.setText(formatString(phone[0]));a.setText(formatString(phone[1]));t = (TextView) findViewById(R.id.total_total);a = (TextView) findViewById(R.id.totla_avilable);t.setText(formatString(sd[0]+phone[0]));a.setText(formatString(sd[1]+phone[1]));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@SuppressWarnings("deprecation")private long[] getInfo(File file) {// 关于SD卡的一些信息的对象StatFs stat = new StatFs(file.getPath());// 获取每个区块的大小long blockSize = stat.getBlockSize();// 获取区块总数long count = stat.getBlockCount();// 获取可用区块数量long available = stat.getAvailableBlocks();return new long[]{blockSize * count,blockSize * available};}private String formatString(long num) {return Formatter.formatFileSize(this, num);}}

向sdcard中写入数据

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import android.content.Context;import android.os.Environment;import android.widget.Toast;public class LoginService {/** * 保存用户名和密码 * @param context 上下文 * @param unserName 用户名 * @param password 密码 * @return true 保存成功  false 保存失败 */public static boolean saveUserInfo(Context context ,String userName ,String password){//检查SD卡的状态String state = Environment.getExternalStorageState();if (!Environment.MEDIA_MOUNTED.equals(state)) {Toast.makeText(context, "SD卡不可用,请检查SD卡状态", Toast.LENGTH_LONG).show();return false;}//返回文件目录File file = new File(Environment.getExternalStorageDirectory(),"info.txt");FileOutputStream fos = null;try {fos = new FileOutputStream(file);fos.write((userName+"##"+password).getBytes());fos.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}/** * 获取保存的数据 * @param ctx * @return */public static Map<String,String> getUserInfo(Context ctx){File file = new File(Environment.getExternalStorageDirectory(),"info.txt");FileInputStream fis = null;;try {fis = new FileInputStream(file);BufferedReader br = new BufferedReader(new InputStreamReader(fis));String str = br.readLine();String [] info = str.split("##");Map<String,String> map = new HashMap<String,String>();map.put("userName", info[0]);map.put("password", info[1]);return map;} catch (Exception e) {e.printStackTrace();return null;}}}

注意:

1、向sdcard中写入数据一定要在manifest中的Permission里给予相应权限。因为4.0一下版本默认有读取权限,但无写入权限。4.0以上如果用户设置的话甚至连读取权限都没有。

2、在eclipse中DDMS里查看sdcard中的内容,视频中直接找到sdcard即可,但我的是需要在mnt/sdcard中才能看。不知道是什么问题。

0 0