Chinaunix首页 | 论坛 | 博客
  • 博客访问: 473574
  • 博文数量: 155
  • 博客积分: 2954
  • 博客等级: 少校
  • 技术积分: 1000
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-12 22:00
文章分类

全部博文(155)

文章存档

2014年(2)

2013年(5)

2012年(10)

2011年(33)

2010年(105)

我的朋友

分类: 嵌入式

2010-10-21 10:25:52

作者注:由于我在测试这个功能的时候发现文件名无法使用中文(sdk2.2 + 模拟器),如果有哪为高手无意中浏览此文章后,能对这个问题予以指点,我将感激不尽。呵呵。


********************注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径
getFileDir() ----- /data/data/cn.xxx.xxx(当前包)/files
getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cache

Java代码 复制代码
  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.     }   
  227.   
  228. 3.文件布局文件:main.xml   
  229.     "1.0" encoding="utf-8"?>   
  230.     ""  
  231.         android:orientation="vertical"  
  232.         android:layout_width="fill_parent"  
  233.         android:layout_height="fill_parent"  
  234.         >   
  235.            
  236.         
  237.             android:layout_width="fill_parent"    
  238.             android:layout_height="wrap_content"    
  239.             android:text="@string/filename"  
  240.         />   
  241.            
  242.         
  243.             android:layout_width="fill_parent"    
  244.             android:layout_height="wrap_content"    
  245.             android:id="@+id/filename"  
  246.         />   
  247.            
  248.         
  249.             android:layout_width="fill_parent"    
  250.             android:layout_height="wrap_content"    
  251.             android:text="@string/content"  
  252.         />   
  253.            
  254.         
  255.             android:layout_width="fill_parent"    
  256.             android:layout_height="wrap_content"    
  257.             android:minLines="3"  
  258.             android:id="@+id/content"  
  259.         />   
  260.            
  261.         
  262.         android:orientation="horizontal"  
  263.         android:layout_width="fill_parent"  
  264.         android:layout_height="fill_parent">   
  265.            
  266.             
  267.                 android:layout_width="wrap_content"    
  268.                 android:layout_height="wrap_content"    
  269.                 android:id="@+id/button"  
  270.                 android:text="@string/save"  
  271.             />   
  272.                
  273.             
  274.                 android:layout_width="wrap_content"    
  275.                 android:layout_height="wrap_content"    
  276.                 android:id="@+id/read"  
  277.                 android:text="@string/read"  
  278.             />   
  279.            
  280.            
  281.            
  282.       
阅读(1142) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~