android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片、音频、视频文件等。如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时候缓存文件或内部文件将会被清除。

  以下是开发学习中所写的示例代码,以供日后查阅:

  xml:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     android:paddingBottom="@dimen/activity_vertical_margin" 6     android:paddingLeft="@dimen/activity_horizontal_margin" 7     android:paddingRight="@dimen/activity_horizontal_margin" 8     android:paddingTop="@dimen/activity_vertical_margin" 9     tools:context=".MainActivity" >10 11     <EditText12         android:id="@+id/editText1"13         android:layout_width="wrap_content"14         android:layout_height="wrap_content"15         android:layout_alignParentLeft="true"16         android:layout_alignParentTop="true"17         android:layout_marginTop="44dp"18         android:ems="10" />19 20     <Button21         android:id="@+id/button1"22         android:layout_width="wrap_content"23         android:layout_height="wrap_content"24         android:layout_alignRight="@+id/editText1"25         android:layout_below="@+id/editText1"26         android:layout_marginRight="57dp"27         android:layout_marginTop="23dp"28         android:text="保存信息" />29 30 </RelativeLayout>
activity_main.xml

  activity:

  1 package com.example.android_data_storage_internal;  2   3 import java.io.ByteArrayOutputStream;  4 import java.io.InputStream;  5 import java.net.URI;  6   7 import org.apache.http.HttpResponse;  8 import org.apache.http.client.HttpClient;  9 import org.apache.http.client.methods.HttpGet; 10 import org.apache.http.impl.client.DefaultHttpClient; 11  12 import android.app.Activity; 13 import android.content.Context; 14 import android.os.AsyncTask; 15 import android.os.Bundle; 16 import android.view.Menu; 17 import android.view.View; 18 import android.widget.Button; 19 import android.widget.EditText; 20 import android.widget.Toast; 21  22 import com.example.android_data_storage_internal.file.FileService; 23 /** 24  * @author xiaowu 25  * @note 数据存储之文件内容存储 26  */ 27 /** 28  * @author xiaowu 29  * @note 数据存储之文件内容存储(内部文件存储包括默认的文件存储、缓存文件存储) 30  *         通过context对象获取文件路径 31  *             context.getCacheDir(); 32  *             context.getFilesDir(); 33  *         //操作文件的模式:如果需要多种操作模式,可对文件模式进行相加 34         //int  MODE_PRIVATE 私有模式       35         //int  MODE_APPEND 追加模式 36         //int  MODE_WORLD_READABLE 可读 37         //int  MODE_WORLD_WRITEABLE 可写 38  */ 39 public class MainActivity extends Activity { 40     private EditText editText ; 41     private Button button ; 42     private FileService fileService; 43     private final String IMAGEPATH ="http://b.hiphotos.baidu.com/zhidao/pic/item/738b4710b912c8fcda0b7362fc039245d78821a0.jpg"; 44     @Override 45     protected void onCreate(Bundle savedInstanceState) { 46         super.onCreate(savedInstanceState); 47         setContentView(R.layout.activity_main); 48         fileService = new FileService(this); 49         button = (Button) findViewById(R.id.button1); 50         editText = (EditText) findViewById(R.id.editText1); 51         //增加按钮点击监听事件 52         button.setOnClickListener(new View.OnClickListener() { 53             @Override 54             public void onClick(View v) { 55                 String info = editText.getText().toString().trim(); 56                 boolean flag = fileService.SaveContentToFile("info.txt", Context.MODE_APPEND, info.getBytes()); 57                 if(flag){ 58                     Toast.makeText(MainActivity.this, "保存文件成功", 0).show(); 59                 } 60                 //网络下载图片存储之本地 61 //                MyTask task = new MyTask(); 62 //                task.execute(IMAGEPATH); 63             } 64         }); 65     } 66     @Override 67     public boolean onCreateOptionsMenu(Menu menu) { 68         // Inflate the menu; this adds items to the action bar if it is present. 69         getMenuInflater().inflate(R.menu.main, menu); 70         return true; 71     } 72     //自定义异步任务,用于图片下载 73     public class MyTask extends AsyncTask<String,  Integer, byte[]>{ 74         @Override 75         protected byte[] doInBackground(String... params) { 76             HttpClient httpClient = new  DefaultHttpClient(); 77             HttpGet httpGet = new HttpGet(params[0]); 78             InputStream inputStream = null ; 79             byte[] result = null; 80             ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 81             try { 82                 //执行连接从response中读取数据 83                 HttpResponse response = httpClient.execute(httpGet); 84                 int leng = 0 ; 85                 byte [] data = new byte[1024]  ; 86                 if (response.getStatusLine().getStatusCode() == 200) { 87                     inputStream = response.getEntity().getContent(); 88                     while((leng = inputStream.read(data)) != 0) { 89                         byteArrayOutputStream.write(data, 0, leng); 90                     } 91                 } 92                 result = byteArrayOutputStream.toByteArray(); 93                 fileService.SaveContentToFile("info.txt", Context.MODE_APPEND, result); 94             } catch (Exception e) { 95                 e.printStackTrace(); 96             }finally{ 97                 //关连接 98                 httpClient.getConnectionManager().shutdown(); 99             }100             return result;101         }102     }103 }

  文件读写工具类Utils

  

  1 package com.example.android_data_storage_internal.file;  2   3 import java.io.ByteArrayOutputStream;  4 import java.io.File;  5 import java.io.FileInputStream;  6 import java.io.FileOutputStream;  7 import java.io.IOException;  8   9 import android.content.Context; 10  11 /** 12  * @author xiaowu 13  * @NOTE android文件读写帮助类 14  */ 15 public class FileService { 16     private Context context; 17  18     public FileService(Context context) { 19         this.context = context; 20     } 21  22     // fileName:文件名 mode:文件操作权限 23     /** 24      * @param fileName 25      *            文件名 26      * @param mode 27      *            文件操作权限 28      * @param data 29      *            输出流读取的字节数组 30      * @return 31      */ 32     public boolean SaveContentToFile(String fileName, int mode, byte[] data) { 33         boolean flag = false; 34         FileOutputStream fileOutputStream = null; 35         try { 36             //通过文件名以及操作模式获取文件输出流 37             fileOutputStream = context.openFileOutput(fileName, mode); 38             fileOutputStream.write(data, 0, data.length); 39         } catch (Exception e) { 40             e.printStackTrace(); 41         } finally { 42             if (fileOutputStream != null) { 43                 try { 44                     fileOutputStream.close(); 45                 } catch (Exception e) { 46                     e.printStackTrace(); 47                 } 48             } 49         } 50         return flag; 51     } 52  53     /** 54      * @param fileName 55      *            文件名称 56      * @return 文件内容 57      */ 58     public String readContentFromFile(String fileName) { 59         byte[] result = null; 60         FileInputStream fileInputStream = null; 61         ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 62         try { 63             fileInputStream = context.openFileInput(fileName); 64             int len = 0; 65             byte[] data = new byte[1024]; 66             while ((len = fileInputStream.read(data)) != -1) { 67                 outputStream.write(data, 0, len); 68             } 69             result = outputStream.toByteArray(); 70         } catch (Exception e) { 71             e.printStackTrace(); 72         } finally { 73             try { 74                 outputStream.close(); 75             } catch (IOException e) { 76                 // TODO Auto-generated catch block 77                 e.printStackTrace(); 78             } 79         } 80         return new String(result); 81     } 82     /** 83      * @param fileName 文件名称 84      * @param mode 文件权限 85      * @param data  输出流读取的字节数组 86      * @return 是否成功标识 87      */ 88     public boolean saveCacheFile(String fileName, byte[] data) { 89         boolean flag = false; 90         //通过context对象获取文件目录 91         File file = context.getCacheDir(); 92         FileOutputStream fileOutputStream = null; 93         try { 94             File foder = new File(file.getAbsolutePath()+"/txt"); 95             if( !foder.exists() ){ 96                 foder.mkdir();    //创建目录 97             } 98             fileOutputStream = new FileOutputStream(foder.getAbsolutePath()+"/"+fileName); 99             fileOutputStream.write(data, 0, data.length);100 //                    context.openFileOutput("info.txt",101 //                    Context.MODE_PRIVATE);102         } catch (Exception e) {103             e.printStackTrace();104         } finally {105             try {106                 if (fileOutputStream != null) {107                     fileOutputStream.close();108                 }109             } catch (IOException e) {110                 // TODO Auto-generated catch block111                 e.printStackTrace();112             }113         }114         System.out.println(file.getAbsolutePath());115         return flag;116     }117     /**118      * 获取android内存文件夹下的文件列表119      * @param path120      * @return121      */122     public File[] listFileDir(String path){123         //获取目录124         File file = context.getFilesDir();125 //        System.out.println("-->CacheDir"+context.getCacheDir());126 //        /data/data/com.example.android_data_storage_internal/cache127 //        System.out.println("-->FilesDir"+file);128 //        /data/data/com.example.android_data_storage_internal/files129         File root = new File(file.getAbsolutePath()+"/"+path);130         File[] listFiles = root.listFiles();131         return listFiles;132     }133 }

  Junit单元测试类:

 1 package com.example.android_data_storage_internal; 2  3 import android.content.Context; 4 import android.test.AndroidTestCase; 5 import android.util.Log; 6  7 import com.example.android_data_storage_internal.file.FileService; 8 /** 9  * @author xiaowu10  * @note 单元测试类11  *         12  */13 public class MyTest extends AndroidTestCase {14     private final String TAG = "MyTest";15 16     public void save() {17         FileService fileService = new FileService(getContext());18         //操作文件的模式:如果需要多种操作模式,可对文件模式进行相加19         //int  MODE_PRIVATE 私有模式      20         //int  MODE_APPEND 追加模式21         //int  MODE_WORLD_READABLE 可读22         //int  MODE_WORLD_WRITEABLE 可写23         boolean flag = fileService.SaveContentToFile("login.txt", Context.MODE_PRIVATE,24                 "你好".getBytes());25         Log.i(TAG, "-->"+flag);26     }27     public void read(){28         FileService fileService = new FileService(getContext());29         String msg = fileService.readContentFromFile("info.txt");30         Log.i(TAG, "--->"+msg);31     }32     public void test(){33         FileService fileService = new FileService(getContext());34         fileService.saveCacheFile("my.txt","小五".getBytes());35     }36     public void test2(){37         FileService fileService = new FileService(getContext());38         fileService.listFileDir("my.txt");39     }40 }

  清单文件:

  

 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3     package="com.example.android_data_storage_internal" 4     android:versionCode="1" 5     android:versionName="1.0" > 6  7     <uses-sdk 8         android:minSdkVersion="8" 9         android:targetSdkVersion="18" />10 11     <instrumentation12         android:name="android.test.InstrumentationTestRunner"13         android:targetPackage="com.example.android_data_storage_internal" >14     </instrumentation>15     <!-- 增加用户访问网络权限 -->16     <uses-permission android:name="android.permission.INTERNET"/>17 18     <application19         android:allowBackup="true"20         android:icon="@drawable/ic_launcher"21         android:label="@string/app_name"22         android:theme="@style/AppTheme" >23         <!-- 引入用与Junit测试包 -->24         <uses-library android:name="android.test.runner" android:required="true"/>25         <activity26             android:name="com.example.android_data_storage_internal.MainActivity"27             android:label="@string/app_name" >28             <intent-filter>29                 <action android:name="android.intent.action.MAIN" />30 31                 <category android:name="android.intent.category.LAUNCHER" />32             </intent-filter>33         </activity>34     </application>35 36 </manifest>

更多相关文章

  1. [Android] 该文件包与具有同一名称的现有文件包存在冲突
  2. 谷歌推出新操作系统Andromeda,那Android真的将死吗
  3. Android SO文件的兼容和适配
  4. Android activity启动模式理解
  5. 解决在3.6.2安装android的ADT文件bug
  6. 【转】Android中对Log日志文件的分析
  7. android:gravity 和 android:layout_Gravity属性——android开发
  8. Android之文件读写
  9. android usb Host模式下与usb Hid 设备的通信

随机推荐

  1. )Android之getSystemService
  2. Android(安卓)各种基础控件布局
  3. Android(安卓)Studio(五):修改Android(安
  4. android中java与js通信(可以用html来做页
  5. android 复制、剪切、粘贴
  6. Android全屏显示的两种方式
  7. android前后摄像头切换
  8. Android自定义进度条
  9. TabHost布局及新浪式TabHost布局
  10. Android——天气预报(酷欧天气)(第二篇)