2015年4月3日 星期五

getCacheDir用法

原文: http://www.cnblogs.com/jiezzy/archive/2012/04/21/2462191.html

注:在Activity中有getFileDir()和getCacheDir();方法可以獲得當前的手機自帶的存儲空間中的當前包文件的路徑
getFileDir() ----- /data/data/cn.xxx.xxx (當前包)/files
getCacheDir() ----- /data/data/cn.xxx.xxx(當前包)/cache
  1.   
  2. 1 .編寫文件讀取與寫入功能實現類FileService   
  3.   
  4.     package  cn.android.service;   
  5.   
  6.     import  java.io.ByteArrayOutputStream;   
  7.     import  java.io.FileInputStream;   
  8.     import  java.io.FileOutputStream;   
  9.   
  10.     import  android.content.Context;   
  11.     import  android.util.Log;   
  12.   
  13.     /**  
  14.      * 文件保存與讀取功能實現類  
  15.      * @author Administrator  
  16.      *  
  17.      * 2010-6-28 下午08:15:18  
  18.      */  
  19.     public  class  FileService {   
  20.   
  21.         public  static  final  String TAG =  "FileService" ;   
  22.         private  Context context;   
  23.   
  24.         //得到傳入的上下文對象的引用   
  25.         public  FileService(Context context) {   
  26.             this .context = context;   
  27.         }   
  28.   
  29.         /**  
  30.          * 保存文件  
  31.          *   
  32.          * @param fileName 文件名  
  33.          * @param content 文件內容  
  34.          * @throws Exception  
  35.          */  
  36.         public  void  save(String fileName, String content)  throws  Exception {   
  37.   
  38.             // 由於頁面輸入的都是文本信息,所以當文件名不是以.txt後綴名結尾時,自動加上.txt後綴   
  39.             if  (!fileName.endsWith( ".txt" )) {   
  40.                 fileName = fileName +  ".txt" ;   
  41.             }   
  42.                
  43.             byte [] buf = fileName.getBytes( "iso8859-1" );   
  44.                
  45.             Log.e(TAG,  new  String(buf, "utf-8" ));   
  46.                
  47.             fileName =  new  String(buf, "utf-8" );   
  48.                
  49.             Log.e(TAG, fileName);   
  50.                
  51.             // Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND  
  52.             // Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。   
  53.             // Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有權限讀寫該文件。   
  54.             // MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。   
  55.             // 如果希望文件被其他應用讀和寫,可以傳入:   
  56.             // openFileOutput("output.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);   
  57.   
  58.             FileOutputStream fos = context.openFileOutput(fileName, context.MODE_PRIVATE);   
  59.             fos.write(content.getBytes());   
  60.             fos.close();   
  61.         }   
  62.   
  63.         /**  
  64.          * 讀取文件內容  
  65.          *   
  66.          * @param fileName 文件名  
  67.          * @return 文件內容  
  68.          * @throws Exception  
  69.          */  
  70.         public  String read(String fileName)  throws  Exception {   
  71.   
  72.             // 由於頁面輸入的都是文本信息,所以當文件名不是以.txt後綴名結尾時,自動加上.txt後綴   
  73.             if  (!fileName.endsWith( ".txt" )) {   
  74.                 fileName = fileName +  ".txt" ;   
  75.             }   
  76.   
  77.             FileInputStream fis = context.openFileInput(fileName);   
  78.             ByteArrayOutputStream baos =  new  ByteArrayOutputStream();   
  79.   
  80.             byte [] buf =  new  byte [ 1024 ];   
  81.             int  len =  0 ;   
  82.   
  83.             //將讀取後的數據放置在內存中---ByteArrayOutputStream   
  84.             while  ((len = fis.read(buf)) != - 1 ) {   
  85.                 baos.write(buf,  0 , len);   
  86.             }   
  87.   
  88.             fis.close();   
  89.             baos.close();   
  90.   
  91.             //返回內存中存儲的數據   
  92.             return  baos.toString();   
  93.   
  94.         }   
  95.   
  96.     }   
  97.   
  98. 2 .編寫Activity類:   
  99.     package  cn.android.test;   
  100.   
  101.     import  android.app.Activity;   
  102.     import  android.os.Bundle;   
  103.     import  android.util.Log;   
  104.     import  android.view.View;   
  105.     import  android.widget.Button;   
  106.     import  android.widget.EditText;   
  107.     import  android.widget.Toast;   
  108.     import  cn.android.service.FileService;   
  109.   
  110.     public  class  TestAndroidActivity  extends  Activity {   
  111.         /** Called when the activity is first created. */  
  112.            
  113.         //得到FileService對象   
  114.         private  FileService fileService =  new  FileService( this );   
  115.         //定義視圖中的filename輸入框對象   
  116.         private  EditText fileNameText;   
  117.         //定義視圖中的contentText輸入框對象   
  118.         private  EditText contentText;   
  119.         //定義一個土司提示對象   
  120.         private  Toast toast;   
  121.   
  122.            
  123.         @Override  
  124.         public  void  onCreate(Bundle savedInstanceState) {   
  125.         super .onCreate(savedInstanceState);   
  126.         setContentView(R.layout.main);   
  127.              
  128.         //得到視圖中的兩個輸入框和兩個按鈕的對象引用   
  129.         Button button = (Button) this .findViewById(R.id.button);   
  130.         Button read = (Button) this .findViewById(R.id.read);   
  131.         fileNameText = (EditText)  this .findViewById(R.id.filename);   
  132.         contentText = (EditText)  this .findViewById(R.id.content);   
  133.            
  134.         //為保存按鈕添加保存事件   
  135.         button.setOnClickListener( new  View.OnClickListener() {   
  136.                 @Override  
  137.                 public  void  onClick(View v) {   
  138.                        
  139.                     String fileName = fileNameText.getText().toString();   
  140.                     String content = contentText.getText().toString();   
  141.                        
  142.                     //當文件名為空的時候,提示用戶文件名為空,並記錄日誌。   
  143.                     if (isEmpty(fileName)) {   
  144.                         toast = Toast.makeText(TestAndroidActivity. this , R.string.empty_filename, Toast.LENGTH_LONG);   
  145.                         toast.setMargin(RESULT_CANCELED,  0 .345f);                                      
  146.                         toast.show();      
  147.                         Log.w(fileService.TAG,  "The file name is empty" );   
  148.                         return ;   
  149.                     }   
  150.                        
  151.                     //當文件內容為空的時候,提示用戶文件內容為空,並記錄日誌。   
  152.                     if (isEmpty(content)) {   
  153.                         toast = Toast.makeText(TestAndroidActivity. this , R.string.empty_content, Toast.LENGTH_LONG);   
  154.                         toast.setMargin(RESULT_CANCELED,  0 .345f);                                      
  155.                         toast.show();      
  156.                         Log.w(fileService.TAG,  "The file content is empty" );   
  157.                         return ;   
  158.                     }   
  159.                        
  160.                     //當文件名和內容都不為空的時候,調用fileService的save方法   
  161.                     //當成功執行的時候,提示用戶保存成功,並記錄日誌   
  162.                     //當出現異常的時候,提示用戶保存失敗,並記錄日誌   
  163.                     try  {   
  164.                         fileService.save(fileName, content);   
  165.                         toast = Toast.makeText(TestAndroidActivity. this , R.string.success, Toast.LENGTH_LONG);   
  166.                         toast.setMargin(RESULT_CANCELED,  0 .345f);                                      
  167.                         toast.show();      
  168.                         Log.i(fileService.TAG,  "The file save successful" );   
  169.                     }  catch  (Exception e) {   
  170.                         toast = Toast.makeText(TestAndroidActivity. this , R.string.fail, Toast.LENGTH_LONG);   
  171.                         toast.setMargin(RESULT_CANCELED,  0 .345f);                                      
  172.                         toast.show();      
  173.                         Log.e(fileService.TAG,  "The file save failed" );   
  174.                     }   
  175.                        
  176.                 }   
  177.         });   
  178.            
  179.            
  180.         //為讀取按鈕添加讀取事件   
  181.         read.setOnClickListener( new  View.OnClickListener() {   
  182.                 @Override  
  183.                 public  void  onClick(View v) {   
  184.                        
  185.                     //得到文件名輸入框中的值   
  186.                     String fileName = fileNameText.getText().toString();   
  187.                        
  188.                     //如果文件名為空,則提示用戶輸入文件名,並記錄日誌   
  189.                     if (isEmpty(fileName)) {   
  190.                         toast = Toast.makeText(TestAndroidActivity. this , R.string.empty_filename, Toast.LENGTH_LONG);   
  191.                         toast.setMargin(RESULT_CANCELED,  0 .345f);                                      
  192.                         toast.show();      
  193.                         Log.w(fileService.TAG,  "The file name is empty" );   
  194.                         return ;   
  195.                     }   
  196.                        
  197.                     //調用fileService的read方法,並將讀取出來的內容放入到文本內容輸入框裡面   
  198.                     //如果成功執行,提示用戶讀取成功,並記錄日誌。   
  199.                     //如果出現異常信息(例:文件不存在),提示用戶讀取失敗,並記錄日誌。   
  200.                     try  {   
  201.                         contentText.setText(fileService.read(fileName));   
  202.                         toast = Toast.makeText(TestAndroidActivity. this , R.string.read_success, Toast.LENGTH_LONG);   
  203.                         toast.setMargin(RESULT_CANCELED,  0 .345f);                                      
  204.                         toast.show();      
  205.                         Log.i(fileService.TAG,  "The file read successful" );   
  206.                     }  catch  (Exception e) {   
  207.                         toast = Toast.makeText(TestAndroidActivity. this , R.string.read_fail, Toast.LENGTH_LONG);   
  208.                         toast.setMargin(RESULT_CANCELED,  0 .345f);                                      
  209.                         toast.show();      
  210.                         Log.e(fileService.TAG,  "The file read failed" );   
  211.                     }   
  212.                 }   
  213.         });   
  214.            
  215.            
  216.         }   
  217.            
  218.         //編寫一個isEmpty方法,判斷字符串是否為空   
  219.         private  boolean  isEmpty(String s) {   
  220.         if (s ==  null  ||  "" .equals(s.trim())) {   
  221.             return  true ;   
  222.         }   
  223.         return  false ;   
  224.         }   
  225.            
  226.     }