|
一、基本概念
在Android应用中保存文件,保存的位置有两处
①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录
②外存储设备如SD卡,较大,适合保存大文件如视频,Android中保存位置在mnt/sdcard目录,androd1.5,android1.6保存在sdcard目录
保存的位置通过android的file explorer视图可以找到
二、例子- package cn.xy.service;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import android.content.Context;
- import android.os.Environment;
- /**
- * 文件操作类
- *
- * @author XY
- *
- */
- public class FileService
- {
- /**
- * 上下文对象
- */
- private Context context;
- public FileService(Context context)
- {
- super ();
- this .context = context;
- }
- /**
- * 保存文件(保存至手机自带的存储空间)
- *
- * @param filename 文件名
- * @param fileContent 文件内容
- */
- @SuppressWarnings ( "static-access" )
- public void save(String filename, String fileContent) throws Exception
- {
- // 私有操作模式:1.该文件只能被本应用访问。2.写入文件的内容会覆盖原有文件的内容
- FileOutputStream fos = context.openFileOutput(filename, context.MODE_PRIVATE); // 默认保存在手机自带的存储空间
- fos.write(fileContent.getBytes( "UTF-8" ));
- fos.close();
- }
- /**
- * 保存文件之SD卡
- *
- * @param filename 文件名
- * @param fileContent 文件内容
- */
- public void saveInSDCard(String filename, String fileContent) throws Exception
- {
- // 若文件被保存在SDCard中,该文件不受读写控制
- File file = new File(Environment.getExternalStorageDirectory(), filename);
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(fileContent.getBytes( "UTF-8" ));
- fos.close();
- }
- /**
- * 读取文件内容
- * 在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长,可使用
- * toByteArray()和 toString()获取数据 关闭 ByteArrayOutputStream
- * 无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException
- *
- * @param filename 文件名
- * @return
- */
- public String read(String filename) throws Exception
- {
- FileInputStream fis = context.openFileInput(filename); // 默认到手机自带的存储空间去找
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- byte [] buffer = new byte [ 1024 ];
- int len = 0 ;
- // 将内容读到buffer中,读到末尾为-1
- while ((len = fis.read(buffer)) != - 1 )
- {
- // 本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用
- outStream.write(buffer, 0 , len);
- }
- // 取内存中保存的数据
- byte [] data = outStream.toByteArray();
- fis.close();
- String result = new String(data, "UTF-8" );
- return result;
- }
- }
|
MainActivity
- try
- {
- // 存储在手机自带存储空间
- fs.save(filename, fileContent);
- Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();
- // 存储在外部设备SD卡
- // 判断SDCARD是否存在和是否可读写
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
- {
- fs.saveInSDCard(filename, fileContent);
- Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();
- }
- else
- {
- Toast.makeText(getApplicationContext(), R.string.failsdcard, Toast.LENGTH_SHORT).show();
- }
- }
- catch (Exception e)
- {
- Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_SHORT).show();
- Log.e(tag, e.getMessage());
- }
|
文件名不带路径,直接输入如xy.txt
对于SD卡的操作,需要在AndroidManifest.xml加入权限
- <!-- 在SDCard中创建和删除文件的权限 -->
- < uses-permission android:name = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
- <!-- 往SDCard中写入数据的权限 -->
- < 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目录
----------------------------
原文链接:https://blog.51cto.com/woshixy/1076826
程序猿的技术大观园:www.javathinker.net
[这个贴子最后由 flybird 在 2020-04-18 19:15:38 重新编辑]
|
网站系统异常
系统异常信息 |
Request URL:
http://www.javathinker.net/WEB-INF/lybbs/jsp/topic.jsp?postID=3136
java.lang.NullPointerException
如果你不知道错误发生的原因,请把上面完整的信息提交给本站管理人员。
|
|