Android开发5――文件读写
16lz
2021-01-23
一、基本概念
在Android应用中保存文件,保存的位置有两处
①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录
②外存储设备如SD卡,较大,适合保存大文件如视频,Android中保存位置在mnt/sdcard目录,androd1.5,android1.6保存在sdcard目录
保存的位置通过android的file explorer视图可以找到
二、例子
- packagecn.xy.service;
- importjava.io.ByteArrayOutputStream;
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.FileOutputStream;
- importandroid.content.Context;
- importandroid.os.Environment;
- /**
- *文件操作类
- *
- *@authorXY
- *
- */
- publicclassFileService
- {
- /**
- *上下文对象
- */
- privateContextcontext;
- publicFileService(Contextcontext)
- {
- super();
- this.context=context;
- }
- /**
- *保存文件(保存至手机自带的存储空间)
- *
- *@paramfilename文件名
- *@paramfileContent文件内容
- */
- @SuppressWarnings("static-access")
- publicvoidsave(Stringfilename,StringfileContent)throwsException
- {
- //私有操作模式:1.该文件只能被本应用访问。2.写入文件的内容会覆盖原有文件的内容
- FileOutputStreamfos=context.openFileOutput(filename,context.MODE_PRIVATE);//默认保存在手机自带的存储空间
- fos.write(fileContent.getBytes("UTF-8"));
- fos.close();
- }
- /**
- *保存文件之SD卡
- *
- *@paramfilename文件名
- *@paramfileContent文件内容
- */
- publicvoidsaveInSDCard(Stringfilename,StringfileContent)throwsException
- {
- //若文件被保存在SDCard中,该文件不受读写控制
- Filefile=newFile(Environment.getExternalStorageDirectory(),filename);
- FileOutputStreamfos=newFileOutputStream(file);
- fos.write(fileContent.getBytes("UTF-8"));
- fos.close();
- }
- /**
- *读取文件内容
- *在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长,可使用
- *toByteArray()和toString()获取数据关闭ByteArrayOutputStream
- *无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException
- *
- *@paramfilename文件名
- *@return
- */
- publicStringread(Stringfilename)throwsException
- {
- FileInputStreamfis=context.openFileInput(filename);//默认到手机自带的存储空间去找
- ByteArrayOutputStreamoutStream=newByteArrayOutputStream();
- byte[]buffer=newbyte[1024];
- intlen=0;
- //将内容读到buffer中,读到末尾为-1
- while((len=fis.read(buffer))!=-1)
- {
- //本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用
- outStream.write(buffer,0,len);
- }
- //取内存中保存的数据
- byte[]data=outStream.toByteArray();
- fis.close();
- Stringresult=newString(data,"UTF-8");
- returnresult;
- }
- }
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(Exceptione)
- {
- Toast.makeText(getApplicationContext(),R.string.fail,Toast.LENGTH_SHORT).show();
- Log.e(tag,e.getMessage());
- }
文件名不带路径,直接输入如xy.txt
对于SD卡的操作,需要在AndroidManifest.xml加入权限
- <!--在SDCard中创建和删除文件的权限-->
- <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
- <!--往SDCard中写入数据的权限-->
- <uses-permissionandroid: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目录
更多相关文章
- android 获取uri的正确文件路径的办法
- 在android studio的虚拟机的sd卡上创建文件夹
- Android 使用decodeFile方法加载手机磁盘中的图片文件
- Android AudioRecord录音实时pcm 编码为 aac 文件
- android保存文件
- Android情景模式、文件管理器 完整示例编程详解