操作sdcard读取写入文件.docx_第1页
操作sdcard读取写入文件.docx_第2页
操作sdcard读取写入文件.docx_第3页
操作sdcard读取写入文件.docx_第4页
操作sdcard读取写入文件.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在Android中读写文件可以采用两种方式:一种是采用JDK提供的FileInputStream、FileOutputStream这些类来操作,另一种是采用Android的Context类自带的一些方法操作,如FileOutputStream openFileOutput(String name, int mode)方法用于写文件,FileInputStream openFileInput(String name)方法用于读文件。mode有四种模式,分别为: Context.MODE_PRIVATE = 0Context.MODE_APPEND = 32768Context.MODE_WORLD_READABLE = 1Context.MODE_WORLD_WRITEABLE = 2Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPENDContext.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。如果希望文件被其他应用读和写,可以传入: openFileOutput(test.txt, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);SDcard的读写访问一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。 SDCard是干什么的?你可以把它看作是移动硬盘或U盘。在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img:mksdcard 2048M D:AndroidToolsdcard.img在程序中访问SDCard,你需要申请访问SDCard的权限。在AndroidManifest.xml中加入访问SDCard的权限如下:要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)File sdCardDir = Environment.getExternalStorageDirectory();/获取SDCard目录File saveFile = new File(sdCardDir, “happy.txt”);FileOutputStream outStream = new FileOutputStream(saveFile);outStream.write(Happy.getBytes();outStream.close();Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。Environment.getExternalStorageDirectory()方法用于获取SDCard的目录,当然要获取SDCard的目录,你也可以这样写:File sdCardDir = new File(/mnt/sdcard); /获取SDCard目录File saveFile = new File(sdCardDir, happy.txt); /上面两句代码可以合成一句: File saveFile = new File(/mnt/sdcard/happy.txt);FileOutputStream outStream = new FileOutputStream(saveFile);outStream.write(Happy .getBytes();outStream.close();下面列出项目代码以供参考:AndroidManifest.xmlhtml view plaincopyprint?1. 2. 5. 6. 7. 8. 9. 10. 11. 12. 13.14. 15. 16. 18. 19. 20. 21. 22. res/values/strings.xmlhtml view plaincopyprint?1. 2. 3. Hello World, FileActivity! 4. 文件操作 5. 文件名称 6. 文件内容 7. 保存文件 8. 文件保存成功 9. 文件保存失败 10. SDCard不存在或已被写保护了 11. 界面布局文件res/layout/main.xmlhtml view plaincopyprint?1. 2. 7. 12. 17. 22. 28. 34. src/com/geniusxiaoyu/file/service/FileService.javajava view plaincopyprint?1. package com.geniusxiaoyu.service; 2.3. import java.io.ByteArrayOutputStream; 4. import java.io.File; 5. import java.io.FileInputStream; 6. import java.io.FileOutputStream; 7.8. import android.content.Context; 9. import android.os.Environment; 10.11. public class FileService 12. private Context context; 13. public FileService(Context context) 14. this.context = context; 15. 16.17. /* 18. * 保存文件 19. * param filename 文件名 20. * param content 内容 21. * param mode 模式 22. * throws Exception 23. */ 24. public void save(String filename, String content, int mode) throws Exception 25. FileOutputStream fos = context.openFileOutput(filename, mode); 26. /写入数据 27. fos.write(content.getBytes(); 28. /关闭输出流 29. fos.close(); 30.31. 32.33. /* 34. * 保存文件,以私有模式保存 35. * param filename 文件名 36. * param content 内容 37. * throws Exception 38. */ 39. public void save(String filename, String content) throws Exception 40. save(filename, content, Context.MODE_PRIVATE); 41. 42.43. /* 44. * 往存储卡中写入数据 45. * param filename 46. * param content 47. * throws Exception 48. */ 49. public void saveToSDCard(String filename, String content) throws Exception 50. /SDcard路径在2.2以前是/sdcard,在2.2以上版本中是/mnt/sdcard,最好采用下面的方式灵活获取,适用于所有版本 51. File file = new File(Environment.getExternalStorageDirectory(), filename); 52. FileOutputStream fos = new FileOutputStream(file); 53. /写入数据 54. fos.write(content.getBytes(); 55. /关闭输出流 56. fos.close(); 57.58. 59.60. public String readFile(String filename) throws Throwable 61. FileInputStream fis = context.openFileInput(filename); 62. byte buf = new byte1024; 63. int len = 0; 64. ByteArrayOutputStream baos = new ByteArrayOutputStream(); 65. /读取数据 66. while(len = fis.read(buf) != -1) 67. baos.write(buf, 0, len); 68. 69. byte data = baos.toByteArray(); 70. /关闭流 71. baos.close(); 72. fis.close(); 73. return new String(data); 74. 75. src/com/geniusxiaoyu/file/FileActivity.javajava view plaincopyprint?1. package com.geniusxiaoyu.file; 2.3. import android.app.Activity; 4. import android.os.Bundle; 5. import android.os.Environment; 6. import android.util.Log; 7. import android.view.View; 8. import android.widget.Button; 9. import android.widget.EditText; 10. import android.widget.Toast; 11.12. import com.geniusxiaoyu.service.FileService; 13.14. public class FileActivity extends Activity 15. private FileService fileService; 16. private static final String TAG = FileActivity; 17.18. /* Called when the activity is first created. */ 19. Override 20. public void onCreate(Bundle savedInstanceState) 21. super.onCreate(savedInstanceState); 22. setContentView(R.layout.main); 23.24. fileService = new FileService(this); 25.26. Button button = (Button)this.findViewById(R.id.button); 27. button.setOnClickListener(new View.OnClickListener() 28.29. Override 30. public void onClick(View v) 31. /1.获取输入的数据 32. EditText filenameText = (EditText)findViewById(R.id.filename); 33. EditText filecontentText = (EditText)findViewById(R.id.filecontent); 34. String filename = filenameText.getText().toString(); 35. String filecontent = filecontentText.getText().toString(); 36.37. /2.保存内容 38. try 39. /直接存入手机 40. fileService.save(filename, filecontent); 41. /判断手机上是否有SDCard,并且可以进行读写访问 42. if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) 43. fileService.saveToSDCard(filename, filecontent); 44. Toast.makeText(FileActivity.this, R.string.success, Toast.LENGTH_LONG).show(); 45. else 46. Toast.makeText(FileActivity.this, R.string.sdcarderror, Toast.LENGTH_LONG).show(); 47. 48. catch (Exception e) 49. Log.e(TAG, e.toString(); 50. Toast.makeText(FileActivity.this, R.string.failed, Toast.LENGTH_LONG).show(); 51. 52.53. 54. ); 55. 56. 单元测试类src/com/geniusxiaoyu/file/FileServiceTest.javajava view plaincopyprint?1. package com.geniusxiaoyu.file; 2.3. import android.content.Context; 4. import android.test.AndroidTestCase; 5. import android.util.Log; 6.7. import com.geniusxiaoyu.service.FileService; 8.9. public class FileServiceTest extends AndroidTestCase 10. private static final String TAG = FileServiceTest; 11.12. public void testSave() throws Throwable 13. FileService service = new FileService(this.getContext(); 14. service.save(test1.txt, 哈哈哈hahaha); 15. 16.17. public void testReadFile() throws Throwable 18. FileService service = new FileService(this.getContext(); 19. String content = service.readFile(rwa.txt); 20. /日志输出文件内容 21. Log.i(TAG, content); 22. 23.24. public void testSaveAppend() throws Throwable 25. FileService service = new FileService(this.getContext(); 26. service.save(test1.txt, append something., Context.MODE_APPEND); 27. 28.29. public void testSaveReadable() throws Throwable 30. FileService service = new FileSer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论