A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 657667058 中级黑马   /  2015-9-19 21:04  /  304 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、基本概念
在Android应用中保存文件,保存的位置有两处
①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录
②外存储设备如SD卡,较大,适合保存大文件如视频,Android中保存位置在mnt/sdcard目录,androd1.5,android1.6保存在sdcard目录
保存的位置通过android的file explorer视图可以找到

二、例子

01.package cn.xy.service;  02. 03.import java.io.ByteArrayOutputStream;  04.import java.io.File;  05.import java.io.FileInputStream;  06.import java.io.FileOutputStream;  07. 08.import android.content.Context;  09.import android.os.Environment;  10. 11./**  12. * 文件操作类  13. *   14. * @author XY  15. *   16. */ 17.public class FileService  18.{  19.    /**  20.     * 上下文对象  21.     */ 22.    private Context context;  23. 24.    public FileService(Context context)  25.    {  26.        super();  27.        this.context = context;  28.    }  29. 30.    /**  31.     * 保存文件(保存至手机自带的存储空间)  32.     *   33.     * @param filename 文件名  34.     * @param fileContent 文件内容  35.     */ 36.    @SuppressWarnings("static-access")  37.    public void save(String filename, String fileContent) throws Exception  38.    {  39.        // 私有操作模式:1.该文件只能被本应用访问。2.写入文件的内容会覆盖原有文件的内容  40.        FileOutputStream fos = context.openFileOutput(filename, context.MODE_PRIVATE); // 默认保存在手机自带的存储空间  41.        fos.write(fileContent.getBytes("UTF-8"));  42.        fos.close();  43.    }  44. 45.    /**  46.     * 保存文件之SD卡  47.     *   48.     * @param filename 文件名  49.     * @param fileContent 文件内容  50.     */ 51.    public void saveInSDCard(String filename, String fileContent) throws Exception  52.    {  53.        // 若文件被保存在SDCard中,该文件不受读写控制  54.        File file = new File(Environment.getExternalStorageDirectory(), filename);  55.        FileOutputStream fos = new FileOutputStream(file);  56.        fos.write(fileContent.getBytes("UTF-8"));  57.        fos.close();  58.    }  59. 60.    /**  61.     * 读取文件内容  62.     * 在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长,可使用  63.     * toByteArray()和 toString()获取数据 关闭 ByteArrayOutputStream  64.     * 无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException  65.     *   66.     * @param filename 文件名  67.     * @return  68.     */ 69.    public String read(String filename) throws Exception  70.    {  71.        FileInputStream fis = context.openFileInput(filename); // 默认到手机自带的存储空间去找  72.        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  73.        byte[] buffer = new byte[1024];  74.        int len = 0;  75.        // 将内容读到buffer中,读到末尾为-1  76.        while ((len = fis.read(buffer)) != -1)  77.        {  78.            // 本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用  79.            outStream.write(buffer, 0, len);  80.        }  81.        // 取内存中保存的数据  82.        byte[] data = outStream.toByteArray();  83.        fis.close();  84.        String result = new String(data, "UTF-8");  85.        return result;  86.    }  87. 88.}  MainActivity
01.try 02.{  03.    // 存储在手机自带存储空间  04.    fs.save(filename, fileContent);  05.    Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();  06. 07.    // 存储在外部设备SD卡  08.    // 判断SDCARD是否存在和是否可读写  09.    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))  10.    {  11.        fs.saveInSDCard(filename, fileContent);  12.        Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();  13.    }  14.    else 15.    {  16.        Toast.makeText(getApplicationContext(), R.string.failsdcard, Toast.LENGTH_SHORT).show();  17.    }  18. 19.}  20.catch (Exception e)  21.{  22.    Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_SHORT).show();  23.    Log.e(tag, e.getMessage());  24.} 文件名不带路径,直接输入如xy.txt
对于SD卡的操作,需要在AndroidManifest.xml加入权限
01.<!-- 在SDCard中创建和删除文件的权限 --> 02.<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 03. 04.<!-- 往SDCard中写入数据的权限 --> 05.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
三、一些API
①Environment.getExternalStorageDirectory()获取的路径为mnt/sdcard目录,对于android1.5,1.6的路径是sdcard目录
②Activity中提供了两个API
getCacheDir()获取的路径为data/data/应用包名/cache目录
getFilesDir()获取的路径为data/data/应用包名/files目录

1 个回复

倒序浏览
赞赞加支持!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马