1.在AndroidManifest文件下添加SDCard的读写权限

Xml代码 复制代码 收藏代码spinner.gif

  1. <!-- 在SDCard中创建与删除文件权限 -->
  2. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  3. <!-- 往SDCard写入数据权限 -->
  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2.文件操作的各种模式如下代码:(注意通过getExternalStorageDirectory方法获取SDCard的文件路径)

Java代码 复制代码 收藏代码spinner.gif

  1. package com.hoo.file;    
  2. import java.io.ByteArrayOutputStream;    
  3. import java.io.File;    
  4. import java.io.FileInputStream;    
  5. import java.io.FileOutputStream;    
  6. import android.content.Context;    
  7. import android.os.Environment;    
  8. public class FileService     
  9. {    
  10. private Context context;    
  11. public FileService(Context context)     
  12.     {    
  13. this.context = context;    
  14.     }    
  15. /** 
  16.      * 读取文件的内容 
  17.      * @param filename 文件名称 
  18.      * @return 
  19.      * @throws Exception 
  20.      */
  21. public String readFile(String filename) throws Exception    
  22.     {    
  23. //获得输入流  
  24.         FileInputStream inStream = context.openFileInput(filename);    
  25. //new一个缓冲区  
  26. byte[] buffer = new byte[1024];    
  27. int len = 0;    
  28. //使用ByteArrayOutputStream类来处理输出流  
  29.         ByteArrayOutputStream outStream = new ByteArrayOutputStream();    
  30. while( (len = inStream.read(buffer))!= -1)    
  31.         {    
  32. //写入数据  
  33.             outStream.write(buffer, 0, len);    
  34.         }    
  35. //得到文件的二进制数据  
  36. byte[] data = outStream.toByteArray();    
  37. //关闭流  
  38.         outStream.close();    
  39.         inStream.close();    
  40. return new String(data);    
  41.     }    
  42. /** 
  43.      * 以默认私有方式保存文件内容至SDCard中 
  44.      * @param filename  
  45.      * @param content  
  46.      * @throws Exception 
  47.      */
  48. public void saveToSDCard(String filename, String content) throws Exception    
  49.     {    
  50. //通过getExternalStorageDirectory方法获取SDCard的文件路径  
  51.         File file = new File(Environment.getExternalStorageDirectory(), filename);    
  52. //获取输出流  
  53.         FileOutputStream outStream = new FileOutputStream(file);    
  54.         outStream.write(content.getBytes());    
  55.         outStream.close();    
  56.     }    
  57. /** 
  58.      * 以默认私有方式保存文件内容,存放在手机存储空间中 
  59.      * @param filename  
  60.      * @param content  
  61.      * @throws Exception 
  62.      */
  63. public void save(String filename, String content) throws Exception    
  64.     {    
  65. //  
  66.         FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE);    
  67.         outStream.write(content.getBytes());    
  68.         outStream.close();    
  69.     }    
  70. /** 
  71.      * 以追加的方式保存文件内容 
  72.      * @param filename 文件名称 
  73.      * @param content 文件内容 
  74.      * @throws Exception 
  75.      */
  76. public void saveAppend(String filename, String content) throws Exception    
  77.     {       
  78.         FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_APPEND);    
  79.         outStream.write(content.getBytes());    
  80.         outStream.close();    
  81.     }    
  82. /** 
  83.      * 以允许其他应用从该文件中读取内容的方式保存文件(Context.MODE_WORLD_READABLE) 
  84.      * @param filename 文件名称 
  85.      * @param content 文件内容 
  86.      * @throws Exception 
  87.      */
  88. public void saveReadable(String filename, String content) throws Exception    
  89.     {    
  90.         FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_READABLE);    
  91.         outStream.write(content.getBytes());    
  92.         outStream.close();    
  93.     }    
  94. /** 
  95.      * 以允许其他应用往该文件写入内容的方式保存文件 
  96.      * @param filename 文件名称 
  97.      * @param content 文件内容 
  98.      * @throws Exception 
  99.      */
  100. public void saveWriteable(String filename, String content) throws Exception    
  101.     {    
  102.         FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_WRITEABLE);    
  103.         outStream.write(content.getBytes());    
  104.         outStream.close();    
  105.     }    
  106. /** 
  107.      * 以允许其他应用对该文件读和写的方式保存文件(MODE_WORLD_READABLE与MODE_WORLD_WRITEABLE) 
  108.      * @param filename 文件名称 
  109.      * @param content 文件内容 
  110.      * @throws Exception 
  111.      */
  112. public void saveRW(String filename, String content) throws Exception    
  113.     {    
  114.         FileOutputStream outStream = context.openFileOutput(filename,    
  115.                 Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);    
  116. //Context.MODE_WORLD_READABLE(1) + Context.MODE_WORLD_WRITEABLE(2),其实可用3替代  
  117.         outStream.write(content.getBytes());    
  118.         outStream.close();    
  119.     }    
  120. }   
package com.hoo.file; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import android.content.Context; import android.os.Environment; public class FileService { private Context context; public FileService(Context context) { this.context = context; } /** * 读取文件的内容 * @param filename 文件名称 * @return * @throws Exception */ public String readFile(String filename) throws Exception { //获得输入流 FileInputStream inStream = context.openFileInput(filename); //new一个缓冲区 byte[] buffer = new byte[1024]; int len = 0; //使用ByteArrayOutputStream类来处理输出流 ByteArrayOutputStream outStream = new ByteArrayOutputStream(); while( (len = inStream.read(buffer))!= -1) { //写入数据 outStream.write(buffer, 0, len); } //得到文件的二进制数据 byte[] data = outStream.toByteArray(); //关闭流 outStream.close(); inStream.close(); return new String(data); } /** * 以默认私有方式保存文件内容至SDCard中 * @param filename * @param content * @throws Exception */ public void saveToSDCard(String filename, String content) throws Exception { //通过getExternalStorageDirectory方法获取SDCard的文件路径 File file = new File(Environment.getExternalStorageDirectory(), filename); //获取输出流 FileOutputStream outStream = new FileOutputStream(file); outStream.write(content.getBytes()); outStream.close(); } /** * 以默认私有方式保存文件内容,存放在手机存储空间中 * @param filename * @param content * @throws Exception */ public void save(String filename, String content) throws Exception { // FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE); outStream.write(content.getBytes()); outStream.close(); } /** * 以追加的方式保存文件内容 * @param filename 文件名称 * @param content 文件内容 * @throws Exception */ public void saveAppend(String filename, String content) throws Exception { FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_APPEND); outStream.write(content.getBytes()); outStream.close(); } /** * 以允许其他应用从该文件中读取内容的方式保存文件(Context.MODE_WORLD_READABLE) * @param filename 文件名称 * @param content 文件内容 * @throws Exception */ public void saveReadable(String filename, String content) throws Exception { FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_READABLE); outStream.write(content.getBytes()); outStream.close(); } /** * 以允许其他应用往该文件写入内容的方式保存文件 * @param filename 文件名称 * @param content 文件内容 * @throws Exception */ public void saveWriteable(String filename, String content) throws Exception { FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_WRITEABLE); outStream.write(content.getBytes()); outStream.close(); } /** * 以允许其他应用对该文件读和写的方式保存文件(MODE_WORLD_READABLE与MODE_WORLD_WRITEABLE) * @param filename 文件名称 * @param content 文件内容 * @throws Exception */ public void saveRW(String filename, String content) throws Exception { FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); //Context.MODE_WORLD_READABLE(1) + Context.MODE_WORLD_WRITEABLE(2),其实可用3替代 outStream.write(content.getBytes()); outStream.close(); } }

3.写入数据前判断sdcard是否存在于手机上,是否有写保护

Java代码 复制代码 收藏代码spinner.gif

  1. package com.hoo.file;    
  2. import android.app.Activity;    
  3. import android.os.Bundle;    
  4. import android.os.Environment;    
  5. import android.util.Log;    
  6. import android.view.View;    
  7. import android.widget.Button;    
  8. import android.widget.EditText;    
  9. import android.widget.Toast;    
  10. public class MainActivity extends Activity     
  11. {    
  12. private static final String TAG = "MainActivity";    
  13. private FileService fileService;    
  14. @Override
  15. public void onCreate(Bundle savedInstanceState)     
  16.     {    
  17. super.onCreate(savedInstanceState);    
  18.         setContentView(R.layout.main);    
  19.         fileService = new FileService(this);    
  20. //使用下面的方法可以快速获取当前文件夹的位置,  
  21. //这样可以在后面追加路径从而避免使用绝对路径  
  22. //File filedir = this.getFilesDir();  
  23.         Button button = (Button) this.findViewById(R.id.button);    
  24.         button.setOnClickListener(new View.OnClickListener()     
  25.         {    
  26. @Override
  27. public void onClick(View v)     
  28.             {    
  29. //获取EditText中的内容  
  30.                 EditText filenameText = (EditText) findViewById(R.id.filename);    
  31.                 EditText contentText = (EditText) findViewById(R.id.filecontent);    
  32.                 String filename = filenameText.getText().toString();    
  33.                 String content = contentText.getText().toString();    
  34. try
  35.                 {    
  36. //使用通常文件保存方式,默认保存在data/data/包名/file/XXX里面  
  37. //fileService.save(filename, content);  
  38. //判断sdcard是否存在于手机上而且没有写保护  
  39. //Android2.2版本以后sdcard的路径在mnt/sdcard,2.2之前在/sdcard  
  40. if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))    
  41.                     {    
  42. //保存到SDCard中  
  43.                         fileService.saveToSDCard(filename, content);    
  44. //提示保存成功  
  45.                         Toast.makeText(MainActivity.this, R.string.success, 1).show();    
  46.                     }    
  47. else
  48.                     {    
  49. //提示保存失败  
  50.                         Toast.makeText(MainActivity.this, R.string.sdcarderror, 1).show();    
  51.                     }    
  52.                 }     
  53. catch (Exception e)    
  54.                 {    
  55.                     Log.e(TAG, e.toString());    
  56.                     Toast.makeText(MainActivity.this, R.string.error, 1).show();    
  57.                 }    
  58.             }    
  59.         });    
  60.     }    
  61. }   
package com.hoo.file; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private FileService fileService; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fileService = new FileService(this); //使用下面的方法可以快速获取当前文件夹的位置, //这样可以在后面追加路径从而避免使用绝对路径 //File filedir = this.getFilesDir(); Button button = (Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取EditText中的内容 EditText filenameText = (EditText) findViewById(R.id.filename); EditText contentText = (EditText) findViewById(R.id.filecontent); String filename = filenameText.getText().toString(); String content = contentText.getText().toString(); try { //使用通常文件保存方式,默认保存在data/data/包名/file/XXX里面 //fileService.save(filename, content); //判断sdcard是否存在于手机上而且没有写保护 //Android2.2版本以后sdcard的路径在mnt/sdcard,2.2之前在/sdcard if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //保存到SDCard中 fileService.saveToSDCard(filename, content); //提示保存成功 Toast.makeText(MainActivity.this, R.string.success, 1).show(); } else { //提示保存失败 Toast.makeText(MainActivity.this, R.string.sdcarderror, 1).show(); } } catch (Exception e) { Log.e(TAG, e.toString()); Toast.makeText(MainActivity.this, R.string.error, 1).show(); } } }); } }