• Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类


    FileService.java也就是操作sdcard的工具类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    package com.example.data_storage_sdcard.file;
     
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
     
    import android.os.Environment;
     
    /**
     * sdcard的存在于上下文无关
     *
     * @author piaodangdehun
     *
     */
    public class FileService {
     
        /*
         * 存放在sdcard的根目录
         */
        public boolean saveFileToSdcardRoot(String fileName, byte[] data) {
            boolean flag = false;
            /*
             * 先判断sdcard的状态,是否存在
             */
            String state = Environment.getExternalStorageState();
            FileOutputStream outputStream = null;
            File rootFile = Environment.getExternalStorageDirectory(); // 获得sdcard的根路径
            /*
             * 表示sdcard挂载在手机上,并且可以读写
             */
            if (state.equals(Environment.MEDIA_MOUNTED)) {
                File file = new File(rootFile, fileName);
                try {
                    outputStream = new FileOutputStream(file);
                    try {
                        outputStream.write(data, 0, data.length);
                        flag = true;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } finally {
                    if (outputStream != null) {
                        try {
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            return flag;
        }
     
        /*
         * 存放在sdcard下自定义的目录
         */
        public boolean saveFileToSdcardDir(String fileName, byte[] data) {
            boolean flag = false;
            /*
             * 先判断sdcard的状态,是否存在
             */
            String state = Environment.getExternalStorageState();
            FileOutputStream outputStream = null;
            File rootFile = Environment.getExternalStorageDirectory(); // 获得sdcard的根路径
            /*
             * 表示sdcard挂载在手机上,并且可以读写
             */
            if (state.equals(Environment.MEDIA_MOUNTED)) {
                File file = new File(rootFile.getAbsoluteFile() + /txt);
                if (!file.exists()) {
                    file.mkdirs();
                }
                try {
                    outputStream = new FileOutputStream(new File(file, fileName));
                    try {
                        outputStream.write(data, 0, data.length);
                        flag = true;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } finally {
                    if (outputStream != null) {
                        try {
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            return flag;
        }
     
        /*
         * 用于读取sdcard的数据
         */
        public String readContextFromSdcard(String fileName) {
     
            String state = Environment.getExternalStorageState();
            File rooFile = Environment.getExternalStorageDirectory(); // 获得sdcard的目录
     
            FileInputStream inputStream = null;// 用于度取数据的流
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); // 用于存放独处的数据
     
            if (state.equals(Environment.MEDIA_MOUNTED)) {
                File file = new File(rooFile.getAbsoluteFile() + /txt/);// 在sdcard目录下创建一个txt目录
                File file2 = new File(file, fileName);
                int len = 0;
                byte[] data = new byte[1024];
                if (file2.exists()) {
                    try {
                        inputStream = new FileInputStream(file2);
                        try {
                            while ((len = inputStream.read(data)) != -1) {
                                outputStream.write(data, 0, data.length);
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        return new String(outputStream.toByteArray());
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } finally {
                        if (outputStream != null) {
                            try {
                                outputStream.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
            return null;
        }
     
        /**
         * 对文件进行分类的保存到固定的文件中去
         *
         * @param fileName
         * @param data
         */
        public void saveFileToSdcardBySuff(String fileName, byte[] data) {
            // File file = Environment.getExternalStoragePublicDirectory();
            // 保存文件的目录
            File file = null;
            if (Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED)) {
     
                /*
                 * 将不同的文件放入到不同的类别中
                 */
                if (fileName.endsWith(.mp3)) {
                    file = Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
                } else if (fileName.endsWith(.jpg) || fileName.endsWith(.png)
                        || fileName.endsWith(.gif)) {
                    file = Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
                } else if (fileName.endsWith(.mp4) || fileName.endsWith(.avi)
                        || fileName.endsWith(.3gp)) {
                    file = Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
                } else {
                    file = Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
                }
                FileOutputStream outputStream = null;
                try {
                    outputStream = new FileOutputStream(new File(file, fileName));
                    try {
                        outputStream.write(data, 0, data.length);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } finally {
                    if (outputStream != null) {
                        try {
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
     
        /*
         * 删除一个文件
         */
        public boolean deleteFileFromSdcard(String folder, String fileName) {
            boolean flag = false;
            File file = Environment.getExternalStorageDirectory();
            if (Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED)) {
                File exitFile = new File(file.getAbsoluteFile() + / + folder);
                if (exitFile.exists()) {
                    exitFile.delete();
                }
            }
            return flag;
        }
    }


    HttpUtils.java访问网络的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package com.example.data_storage_sdcard.http;
     
    import java.io.IOException;
     
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
     
    public class HttpUtils {
        /*
         *
         */
        public static byte[] getImage(String path) {
            byte[] data = null;
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(path);
            try {
                HttpResponse response = httpClient.execute(httpPost);
                if (response.getStatusLine().getStatusCode() == 200) {
                    data = EntityUtils.toByteArray(response.getEntity());
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                httpClient.getConnectionManager().shutdown();
            }
     
            return data;
     
        }
    }

    ImageCache.java将文件放到cache中的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    package com.example.data_storage_sdcard.img;
     
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
     
    import android.os.Environment;
     
    public class ImageCache {
     
        public static  String saveImageCache(String fileName, byte[] data) {
            File file = Environment.getExternalStorageDirectory(); // 根目录
            FileOutputStream outputStream = null;
            if (Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED)) {
                try {
                    outputStream = new FileOutputStream(new File(file, fileName));
                    outputStream.write(data, 0, data.length);
     
                    return file.getAbsolutePath() + / + fileName;
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (outputStream != null) {
                        try {
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            return null;
        }
    }


    MainActivity.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    package com.example.data_storage_sdcard;
     
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
     
    import com.example.data_storage_sdcard.http.HttpUtils;
    import com.example.data_storage_sdcard.img.ImageCache;
     
    public class MainActivity extends Activity {
        private Button button;
        private ImageView imageView;
        private ProgressDialog progressDialog;
     
        private String imageName;
     
        private final String pathString = http://www.baidu.com/img/bd_logo1.png;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = (Button) this.findViewById(R.id.button1);
            imageView = (ImageView) this.findViewById(R.id.imageView1);
     
            progressDialog = new ProgressDialog(this);
            progressDialog.setTitle(下载提示);
            progressDialog.setMessage(load...);
            button.setOnClickListener(new OnClickListener() {
     
                @Override
                public void onClick(View v) {
                    new MyTask().execute(pathString);
                }
            });
        }
     
        class MyTask extends AsyncTask<string,> {
     
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog.show();
            }
     
            @Override
            protected byte[] doInBackground(String... params) {
                String name = params[0];
                imageName = name
                        .substring(name.lastIndexOf(/) + 1, name.length());
                return HttpUtils.getImage(params[0]);
            }
     
            @Override
            protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
            }
     
            @Override
            protected void onPostExecute(byte[] result) {
                super.onPostExecute(result);
                if (result != null) {
                    Bitmap bm = BitmapFactory.decodeByteArray(result, 0,
                            result.length);
                    imageView.setImageBitmap(bm);
                    ImageCache.saveImageCache(, result);
                } else {
                    imageView.setImageResource(R.drawable.ic_launcher);
                }
                progressDialog.dismiss();
            }
        }
     
        @Override
        public 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;
        }
     
    }
    </string,>


    测试类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    package com.example.data_storage_sdcard;
     
    import java.io.FileWriter;
     
    import com.example.data_storage_sdcard.file.FileService;
     
    import android.nfc.Tag;
    import android.test.AndroidTestCase;
    import android.util.Log;
     
    public class MyTest extends AndroidTestCase {
     
        public void saveFileToSdcardTest() {
            FileService fileService = new FileService();
     
            fileService.saveFileToSdcardRoot(aa.txt,
                    jkhdsfjkhdskjfhdsjf.getBytes());
        }
     
        public void saveFileToSdcardDir() {
            FileService fileService = new FileService();
     
            fileService.saveFileToSdcardRoot(aa.txt,
                    jkhdsfjkhdskjfhdsjf.getBytes());
        }
     
        public void readContextFromSdcardTest() {
            FileService fileService = new FileService();
            String msg = fileService.readContextFromSdcard(aa.txt);
            System.err.println(--> + msg);
        }
     
        public void saveFileToSdcardBySuffTest() {
            FileService fileService = new FileService();
            fileService.saveFileToSdcardBySuff(aa.avi,
                    asdfkajsgdhagsdfhdgsf.getBytes());
        }
     
        public void delFile() {
            FileService fileService = new FileService();
            boolean flag = fileService.deleteFileFromSdcard(txt, aa.txt);
        }
    }


    需要在请单位按中加入访问网络的权限、操作sdcard的权限、测试的权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <!--?xml version=1.0 encoding=utf-8?-->
    <manifest android:versioncode="1" android:versionname="1.0" package="com.example.data_storage_sdcard" xmlns:android="http://schemas.android.com/apk/res/android">
     
        <uses-sdk android:minsdkversion="8" android:targetsdkversion="18">
     
        <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetpackage="com.example.data_storage_sdcard">
        </instrumentation>
        <!-- 添加访问sdcard的权限 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
        <!-- 添加访问网络的权限 -->
        <uses-permission android:name="android.permission.INTERNET">
     
         
            <uses-library android:name="android.test.runner">
     
             
                <intent-filter>
                     
     
                    <category android:name="android.intent.category.LAUNCHER">
                </category></action></intent-filter>
            </activity>
     
            <uses-library>
            </uses-library>
        </uses-library></application>
     
    </uses-permission></uses-permission></uses-sdk></manifest>
     

    结伴旅游,一个免费的交友网站:www.jieberu.com

    推推族,免费得门票,游景区:www.tuituizu.com

  • 相关阅读:
    effective C++ 条款 46:需要类型转换时请为模板定义非成员函数
    effective C++ 条款 42:了解typename的双重意义
    effective C++ 条款 38:通过复合塑模出hasa或“根据某物实现出”
    effective C++ 条款 44:将与参数无关的代码抽离templates
    职场女性工作的六大禁忌
    正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起
    C# 截图 窗体截图 屏幕截图
    C# 创建DataSet 实例
    c# WinForm 中鼠标控制窗体的移动
    访问用户控件里面的控件的两种方法
  • 原文地址:https://www.cnblogs.com/rabbit-bunny/p/4238064.html
Copyright © 2020-2023  润新知