zoukankan      html  css  js  c++  java
  • Android笔记(四十八) Android中的资源访问——SDCard

    访问存储在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>

          运行结果:

      

  • 相关阅读:
    【洛谷2904/BZOJ1617】[USACO08MAR]跨河River Crossing(动态规划)
    【洛谷4158/BZOJ1296】[SCOI2009]粉刷匠(动态规划)
    stat()函数--------------获取文件信息
    mysql数据库优化
    sql注入原理以及实例
    配置Tomcat 7 Gzip
    NDK环境搭建方法2
    IIS7.0上传在大小限制
    背景图片的运动
    时间戳的转换
  • 原文地址:https://www.cnblogs.com/xs104/p/4926611.html
Copyright © 2011-2022 走看看