Android之内置和外置sdcard路径显示并且写入数据的方法

1、效果图片

2、部分代码

package com.example.sdcardcheck;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.storage.StorageManager;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

	public static String TAG = "SdCardCheck";
	public TextView mTv;
	public Button mBtIn;
	public Button mBtout;
	public String result = "";
	public String inSdcardPath = "";
	public String outSdcaraPath = "";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mTv = (TextView)findViewById(R.id.text);
		mBtIn = (Button)findViewById(R.id.button_in);
		mBtout = (Button)findViewById(R.id.button_out);
//		checkPerssiom();
		mBtIn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// 获取SD卡的目录
				saveDataToSdcard(inSdcardPath, "inSdcard_text.txt");
			}
		});
		mBtout.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				saveDataToSdcard(outSdcaraPath, "outSdcard_text.txt");
			}
		});
		checkSd();
		getCommonPath();
		getStoragePath(this, true);
		getStoragePath(this, false);
		getExternalStoreAvailableSize();
		mTv.setText(result);
	}

	public void checkSd() {
		String state = Environment.getExternalStorageState();
		result += "Environment.MEDIA_MOUNTED is:" + state.equals(Environment.MEDIA_MOUNTED) + "\n";
		result += "Environment.MEDIA_MOUNTED_READ_ONLY is:" + state.equals(Environment.MEDIA_MOUNTED_READ_ONLY) + "\n";
		result += "Environment.MEDIA_SHARED is:" + state.equals(Environment.MEDIA_SHARED) + "\n";

		Log.d(TAG, "state.equals(Environment.MEDIA_MOUNTED is:" + state.equals(Environment.MEDIA_MOUNTED));
		Log.d(TAG, "state.equals(Environment.MEDIA_MOUNTED_READ_ONLY is:" + state.equals(Environment.MEDIA_MOUNTED_READ_ONLY));
		Log.d(TAG, "state.equals(Environment.MEDIA_SHARED is:" + state.equals(Environment.MEDIA_SHARED));
	}

	public String getStoragePath(Context mContext, boolean is_removale) {
		StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
		Class<?> storageVolumeClazz = null;
		try {
			storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
			Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
			Method getPath = storageVolumeClazz.getMethod("getPath");
			Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
			Object resultObject = getVolumeList.invoke(mStorageManager);
			final int length = Array.getLength(resultObject);
			for (int i = 0; i < length; i++) {
				Object storageVolumeElement = Array.get(resultObject, i);
				 String path = (String) getPath.invoke(storageVolumeElement);
				 boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
				 if (is_removale == removable) {
					if (is_removale) {
					 result += "sdcard外部存储路经" + path + "\n";
					 outSdcaraPath = path;
					} else {
					 result += "sdcard内部存储路经" + path + "\n";
					 inSdcardPath = path;
					}
					return path;
				 }
			}
	 } catch (ClassNotFoundException e) {
	 	e.printStackTrace();
		} catch (InvocationTargetException e) {
		 e.printStackTrace();
		} catch (NoSuchMethodException e) {
		 e.printStackTrace();
		} catch (IllegalAccessException e) {
		 e.printStackTrace();
		}
		return null;
	}

	public void showSdCard() {
		//String sdcardPath = System.getenv("EXTERNAL_STORAGE");
		String sdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
		result += "sdcard内部存储路经" + sdcardPath + "\n";
		String extSdcardPaht = System.getenv("SECONDARY_STORAGE");
		result += "sdcard外部存储路经" + extSdcardPaht + "\n";

	}
 /**
  * 得到外部存储可用的空间
  * @return 剩余空间的大小,单位是Byte
  */
 public long getExternalStoreAvailableSize(){
 	String state = Environment.getExternalStorageState();
  if(state.equals(Environment.MEDIA_MOUNTED) || state.equals(Environment.MEDIA_SHARED)) {
   // 取得sdcard文件路径
   File pathFile = Environment.getExternalStorageDirectory();
   android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());
   // 获取SDCard上每个block的SIZE
   long nBlocSize = statfs.getBlockSize();
   // 获取可供程序使用的Block的数量
   long nAvailaBlock = statfs.getAvailableBlocks();
   // 计算 SDCard 剩余大小Byte
   long nSDFreeSize = nAvailaBlock * nBlocSize ;
   if (nSDFreeSize > 1024 * 1024 * 1024) {
   	result += "外部存储可用的空间:" + nSDFreeSize/(1024 * 1024 * 1024) + "G\n";
   } else {
   	result += "外部存储可用的空间:" + nSDFreeSize + "Byte\n";
   }
   return nSDFreeSize;
  } else {
  	result += "size:" + "0" + "\n";
  }
  return 0;
 } 

// public void checkPerssiom() {
// 	if (Build.VERSION.SDK_INT >= 23) {
// 		 int REQUEST_CODE_CONTACT = 101;
//  		 String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
//  		 //验证是否许可权限
//  		 for (String str : permissions) {
//  			 if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
//  				 //申请权限
//  				 this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
//  				 return;
//  			 } else {
//  				 Log.d(TAG, "this.checkSelfPermission(str) == PackageManager.PERMISSION_GRANTED");
//  			 }
//  	 }
// 	}
//	}

 public void getCommonPath() {
 	File file = Environment.getExternalStorageDirectory();
 	String path = file.getAbsolutePath();
 	result += "sdcard存储路经" + path + "\n";
 	mTv.post(new Runnable(){
			@Override
			public void run() {
				mTv.setText(result);
			}
		});
 }
 public void saveDataToSdcard(String path, String fileName) {
 	if ("".equals(path) || path == null) {
 		result += "path is null or ''" + "\n";
 		mTv.post(new Runnable(){
				@Override
				public void run() {
					mTv.setText(result);
				}
 		});
 		return;
 	}
 	String str = "sangfor";
		File sdDire = Environment.getExternalStorageDirectory();
		FileOutputStream outFileStream;
		try {
			outFileStream = new FileOutputStream(path + File.separator + fileName);
			outFileStream.write(str.getBytes());
			outFileStream.close();
			Toast.makeText(MainActivity.this, fileName +"文件保存成功", Toast.LENGTH_LONG).show();
		} catch (Exception e) {
			e.printStackTrace();
			result += "save " + fileName +"fail" + "\n";
			mTv.post(new Runnable(){
				@Override
				public void run() {
					mTv.setText(result);
				}
 		});
			Log.e(TAG, "save file fail");
		}
 }
}

以上这篇Android之内置和外置sdcard路径显示并且写入数据的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • android读写sd卡操作写入数据读取数据示例

    复制代码 代码如下: package com.example.sdcardtest;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.io.RandomAccessFil

  • android读取sdcard路径下的文件的方法

    复制代码 代码如下: // 读取sdcard文件private void sdcardRead(){String fileName = "/sdcard/my_sdcard.txt";// assets下文件//String fileName = "/sdcard/test/my_sdcard_test.txt";// sdcard下子目录文件String ret = "";try {FileInputStream fis = new FileI

  • Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径 Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文件夹,根据判断得到内置sdcard跟外置sdcard. 4.程序运行的时候记得给程序添加读取sdcard的权限哦. /** * 得到sdcard的路径 * @return 返回一个字符串数组 下标0:内置sdcard 下标1:外置sdcard

  • Android实现内存中数据保存到sdcard的方法

    本文实例讲述了Android实现内存中数据保存到sdcard的方法.分享给大家供大家参考,具体如下: public static void writeToSdCard(String s) { try { File dst = new File("/sdcard/test_sensor/" + mName + ".txt"); File parent = dst.getParentFile(); if(!parent.exists()) { parent.mkdirs

  • Android 获取内外SD卡路径几种方法总结

    Android 获取SD卡路径: 外置sd卡路径,也许很多同学在平时的工作中并不会用到,因为现在很多机型都不支持外置sd卡(这也是Google目标),所以并不用考虑外置sd卡的路径问题.除了开发文件管理类的应用之外,其他应用使用 Enviroment 这个类中的一些静态方法就能满足需要.但也有一些特殊需求需要用到外置sd卡路径,那怎么才能准确获得外置sd卡的路径呢? 方法一 //内置sd卡路径 String sdcardPath = System.getenv("EXTERNAL_STORAGE

  • Android之内置和外置sdcard路径显示并且写入数据的方法

    1.效果图片 2.部分代码 package com.example.sdcardcheck; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Array; import java.lang.refle

  • Android编程实现悬浮窗获取并显示当前内存使用量的方法

    本文实例讲述了Android编程实现悬浮窗获取并显示当前内存使用量的方法.分享给大家供大家参考,具体如下: 运行效果: 其中: 这一块就是悬浮窗,可以随意拖动,动态显示当前内存使用量. 下面看一下代码是如何实现的: 悬浮窗的实现是用了一个service,为什么要用service呢?了解service特点的大体就会明白.下面看一下: public class FloatService extends Service { WindowManager wm = null; WindowManager.

  • Android编程实现向SD卡写入数据的方法

    本文实例讲述了Android编程实现向SD卡写入数据的方法.分享给大家供大家参考,具体如下: 1.代码: /** * 向sdcard中写入文件 * @param filename 文件名 * @param content 文件内容 */ public void saveToSDCard(String filename,String content) throws Exception{ File file=new File("/mnt/sdcard", filename); Output

  • Android编程实现在自定义对话框中获取EditText中数据的方法

    本文实例讲述了Android编程实现在自定义对话框中获取EditText中数据的方法.分享给大家供大家参考,具体如下: 在项目中忽然遇到这样的问题,需要自定义对话框,对话框需要有一个输入框,以便修改所选中的价格,然后点击确定之后,修改所显示的价格.遇到的最大的问题就是如何能够获取到自定义对话框当中edittext输入的数值,百度了很久,看到的答案都是如下: //得到自定义对话框 final View DialogView = a .inflate ( R.layout.loand, null);

  • python opencv 实现读取、显示、写入图像的方法

    opencv是一个强大的图像处理和计算机视觉库,实现了很多实用算法,值得学习和深究下. opencv包安装 · 这里直接安装opencv-python包(非官方): pip install opencv-python 官方文档:https://opencv-python-tutroals.readthedocs.io/en/latest/ 1.读取图像 import cv2 image=cv2.imread("dog2.jpg",1) 说明: 第二个参数是一个标志,它指定了读取图像的方

  • Android开发实现读取Assets下文件及文件写入存储卡的方法

    本文实例讲述了Android开发实现读取Assets下文件及文件写入存储卡的方法.分享给大家供大家参考,具体如下: 调用一个反编译的.so文件,查看起加密和解密情况,需要解析上万的数组,而so文件加密解密都是通过Byte来进行,又需要把String字符串转化为 Byte,当把数据直接写在代码中就会提示多Byte数组过大.最后把数组写到Assets文件加下,读取txt文本文件. 读取Assets方法如下: public String getFromAssets(String fileName) {

  • Android中没有插入SD情况下的文件写入和读取方法

    在Android开发时会遇到如下一种场合 希望应用下载到当前应用的根目录下,而非SD卡中 然后可以随时被该应用或其他应用访问这个文件,即具有被全局读取的权限 此时可以利用上下文的本地文件输出流进行文件写入 注意要为文件赋予可写可读的权限,否则当读取该文件时会报错 FileOutputStream fos = context.openFileOutput(saveFileName, Context.MODE_WORLD_WRITEABLE | Context.MODE_WORLD_READABLE

  • Android通过json向MySQL中读写数据的方法详解【写入篇】

    本文实例讲述了Android通过json向MySQL中写入数据的方法.分享给大家供大家参考,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Java类,将json上传数据的方法封装好,可以直接在主程序中调用该类,代码如下 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String j

  • Android获得内/外置存储卡路径的方法

    我们知道Android上一般都有外置的存储卡, 但是通过Environment.getExternalStorageDirectory()获取的是内置的存储卡位置 (也有的手机可以在系统中修改默认存储) 那么如何获取外置存储卡的位置呢? 我们可以通过StorageManager来获取多个外置sdcard,代码如下: StorageManager storageManager = (StorageManager) cxt.getSystemService(Context.STORAGE_SERVI

随机推荐