访问存储在SD卡中的文件

使用 Environment.getExternalStorageState(); 判断是否存在内存卡

使用 Environment.getExternalStorageDirectory() 来获取内存卡的根目录路径

内存卡写入:

MainActivity.java

package cn.lixyz.iotest.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import cn.lixyz.iotest.R;
import cn.lixyz.iotest.util.IOFile; public class MainActivity extends Activity implements OnClickListener { private Button bt_sdcard_exist, bt_sdcard_write;
private EditText et_sdcard_input; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); findView();
bt_sdcard_exist.setOnClickListener(this);
bt_sdcard_write.setOnClickListener(this);
} public void findView() {
bt_sdcard_exist = (Button) findViewById(R.id.bt_sdcard_exist);
bt_sdcard_write = (Button) findViewById(R.id.bt_sdcard_write);
et_sdcard_input = (EditText) findViewById(R.id.et_sdcard_input);
} @Override
public void onClick(View v) {
IOFile ioFile;
switch (v.getId()) {
case R.id.bt_sdcard_exist:
ioFile = new IOFile(this);
ioFile.sdCardExist();
break;
case R.id.bt_sdcard_write:
String inputString = et_sdcard_input.getText().toString();
ioFile = new IOFile(this);
ioFile.writeToSDCard(inputString);
break; default:
break;
}
} }

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="cn.lixyz.iotest.activity.MainActivity" > <Button
android:id="@+id/bt_sdcard_exist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="判断手机是否安装内存卡" /> <EditText
android:id="@+id/et_sdcard_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入您要写入的内容" /> <Button
android:id="@+id/bt_sdcard_write"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SDCard写入" /> </LinearLayout>

IOFile.java

package cn.lixyz.iotest.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import android.content.Context;
import android.os.Environment;
import android.widget.Toast; public class IOFile { Context mContext; // 在构造函数中创建一个Context参数,用于在非Activity处弹出Toast
public IOFile(Context context) {
mContext = context;
} public void sdCardExist() {
// 判断手机收安装内存卡,如果没有安装,则弹出提示
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(mContext, "您没有安装SD卡", Toast.LENGTH_SHORT).show();
}
} public void writeToSDCard(String str) { try {
// 获取内存卡跟路径
String sdCardDir = Environment.getExternalStorageDirectory().toString();
File fileName = new File(sdCardDir + "/" + "fileForSDCard.txt");
if (!fileName.exists()) {
fileName.createNewFile();
} //写入文件
FileWriter fileWriter = new FileWriter(fileName);
fileWriter.write(str);
       fileWriter.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

这样运行,会提示权限错误:

需要给工程添加权限:

    <!-- 在内存卡中创建文件和删除文件的权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 向内存卡写入数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

运行结果:

内存卡读取:

MainActivity.java

package cn.lixyz.iotest.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import cn.lixyz.iotest.R;
import cn.lixyz.iotest.util.IOFile; public class MainActivity extends Activity implements OnClickListener { private Button bt_sdcard_exist, bt_sdcard_write, bt_sdcard_read;
private EditText et_sdcard_input; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); findView();
bt_sdcard_exist.setOnClickListener(this);
bt_sdcard_write.setOnClickListener(this);
bt_sdcard_read.setOnClickListener(this);
} public void findView() {
bt_sdcard_exist = (Button) findViewById(R.id.bt_sdcard_exist);
bt_sdcard_write = (Button) findViewById(R.id.bt_sdcard_write);
et_sdcard_input = (EditText) findViewById(R.id.et_sdcard_input);
bt_sdcard_read = (Button) findViewById(R.id.bt_sdcard_read);
} @Override
public void onClick(View v) {
IOFile ioFile;
switch (v.getId()) {
case R.id.bt_sdcard_exist:
ioFile = new IOFile(this);
ioFile.sdCardExist();
break;
case R.id.bt_sdcard_write:
ioFile = new IOFile(this);
String inputString = et_sdcard_input.getText().toString();
ioFile.writeToSDCard(inputString);
break;
case R.id.bt_sdcard_read:
ioFile = new IOFile(this);
ioFile.readFromSDCard();
break;
}
} }

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="cn.lixyz.iotest.activity.MainActivity" > <Button
android:id="@+id/bt_sdcard_exist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="判断手机是否安装内存卡" /> <EditText
android:id="@+id/et_sdcard_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入您要写入的内容" /> <Button
android:id="@+id/bt_sdcard_write"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SDCard写入" /> <Button
android:id="@+id/bt_sdcard_read"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SDCard读取" /> </LinearLayout>

IOFile.java

package cn.lixyz.iotest.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.Flushable;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import android.content.Context;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast; public class IOFile { Context mContext; // 在构造函数中创建一个Context参数,用于在非Activity处弹出Toast
public IOFile(Context context) {
mContext = context;
} // 判断手机是否安装内存卡
public void sdCardExist() {
// 判断手机收安装内存卡,如果没有安装,则弹出提示
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(mContext, "您没有安装SD卡", Toast.LENGTH_SHORT).show();
}
} // 往内存卡中写入内容
public void writeToSDCard(String str) {
try {
// 获取内存卡跟路径
String sdCardDir = Environment.getExternalStorageDirectory().toString();
File fileName = new File(sdCardDir + "/" + "fileForSDCard.txt");
if (!fileName.exists()) {
fileName.createNewFile();
}
// 写入文件
FileWriter fileWriter = new FileWriter(fileName);
fileWriter.write(str);
fileWriter.flush(); } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // 从内存卡中读取内容
public void readFromSDCard() {
try {
File file = new File(Environment.getExternalStorageDirectory() + "/" + "fileForSDCard.txt");
FileInputStream fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
fileInputStream.close(); String str = new String(bytes);
Log.d("TTT", "文件内容是:" + str); } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.lixyz.iotest"
android:versionCode="1"
android:versionName="1.0" > <!-- 在内存卡中创建文件和删除文件的权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 向内存卡写入数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="cn.lixyz.iotest.activity.MainActivity"
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> </manifest>

运行结果:

  

最新文章

  1. Thinking in java学习笔记之finalize
  2. HDU 5875 Function -2016 ICPC 大连赛区网络赛
  3. C++ 表达式
  4. WCF 客户端解决大数据量传输配置
  5. [VB.NET]拖动操作的技术基础
  6. [转]VC的DDK编译环境构建
  7. 我教女朋友学编程Html系列(6)—Html常用表单控件
  8. 蓝桥杯 入门训练 Fibonacci数列
  9. 第五十二篇、 OC获取视频的第一帧图片thumbnailImage
  10. Flume + HDFS + Hive日志收集系统
  11. CSS表格固定列宽
  12. Jenkins的错误“error fetching remote repo origin”的问题解决
  13. Route@书写规则的总结
  14. Jmeter简单介绍与搭配Jenkins实现自动化
  15. liunx问题集
  16. ZooKeeper系列(1):安装搭建ZooKeeper环境
  17. Vim 文本编辑器的基本使用
  18. 2015年传智播客JavaEE 第168期就业班视频教程day45-ERP项目-01 10-类图结构分析设计
  19. 【Java-Method】读《重构》有感_Java方法到底是传值调用还是传引用调用(传钥匙调用)
  20. 程序的载入和运行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25

热门文章

  1. rqalpha学习-2
  2. PKUWC2020自闭记
  3. 【LeetCode】下一个排列【找规律】
  4. MySQL必知必会2
  5. fatal: unable to auto-detect email address (got &#39;CC@LAPTOP-UPQ1N1VQ.(none)&#39;)
  6. 20 IO流(十七)——Commons工具包,FileUtils(二)——copy方法
  7. Select与Epoll的区别
  8. redis网文
  9. IP核——RAM
  10. vue3 父组件给子组件传值 provide &amp; inject