Android数据存取之Files

来源:互联网 发布:修改身份证软件下载 编辑:程序博客网 时间:2024/05/18 20:46

如同前面说的使用Preferences一样,使用File来读写文件也属于常规思路。在Android中没有提供像J2SE里面多的让人抓狂的有关于IO的API。所以使用起来非常简单轻巧。

在Android系统中,这些文件保存在 /data/data/PACKAGE_NAME/files 目录下。

数据读取

view plaincopy to clipboardprint?
  1. public static String read(Context context, String file) {  
  2. String data = "";  
  3. try {  
  4. FileInputStream stream = context.openFileInput(file);  
  5. StringBuffer sb = new StringBuffer();  
  6. int c;  
  7. while ((c = stream.read()) != -1) {  
  8. sb.append((char) c);  
  9. }  
  10. stream.close();  
  11. data = sb.toString();  
  12.  
  13. catch (FileNotFoundException e) {  
  14. catch (IOException e) {  
  15. }  
  16. return data;  

从代码上,看起来唯一的不同就是文件的打开方式了: context.openFileInput(file); Android中的文件读写具有权限控制,所以使用context(Activity的父类)来打开文件,文件在相同的Package中共享。这里的 Package的概念同Preferences中所述的Package,不同于Java中的Package。

数据写入

view plaincopy to clipboardprint?
  1. public static void write(Context context, String file, String msg) {  
  2. try {  
  3. FileOutputStream stream = context.openFileOutput(file,  
  4. Context.MODE_WORLD_WRITEABLE);  
  5. stream.write(msg.getBytes());  
  6. stream.flush();  
  7. stream.close();  
  8. catch (FileNotFoundException e) {  
  9. catch (IOException e) {  
  10. }  

在这里打开文件的时候,声明了文件打开的方式。

一般来说,直接使用文件可能不太好用,尤其是,我们想要存放一些琐碎的数据,那么要生成一些琐碎的文件,或者在同一文件中定义一下格式。其实也可以将其包装成Properties来使用:

view plaincopy to clipboardprint?
  1. public static Properties load(Context context, String file) {  
  2. Properties properties = new Properties();  
  3. try {  
  4. FileInputStream stream = context.openFileInput(file);  
  5. properties.load(stream);  
  6. catch (FileNotFoundException e) {  
  7. catch (IOException e) {  
  8. }  
  9. return properties;  
  10. }  
  11.  
  12. public static void store(Context context, String file, Properties properties) {  
  13. try {  
  14. FileOutputStream stream = context.openFileOutput(file,  
  15. Context.MODE_WORLD_WRITEABLE);  
  16. properties.store(stream, "");  
  17. catch (FileNotFoundException e) {  
  18. catch (IOException e) {  
  19. }  
  20. 编程中文件读写是少不了的,如下:

    读:
    public String ReadSettings(Context context){
          FileInputStream fIn = null;
          InputStreamReader isr = null;
          
          char[] inputBuffer = new char[255];
          String data = null;
          
          try{
           fIn = openFileInput("settings.dat");      
              isr = new InputStreamReader(fIn);
              isr.read(inputBuffer);
              data = new String(inputBuffer);
              Toast.makeText(context, "Settings read",Toast.LENGTH_SHORT).show();
              }
              catch (Exception e) {      
              e.printStackTrace();
              Toast.makeText(context, "Settings not read",Toast.LENGTH_SHORT).show();
              }
              finally {
                 try {
                        isr.close();
                        fIn.close();
                        } catch (IOException e) {
                        e.printStackTrace();
                        }
              }
              return data;
         }

    写:
        public void WriteSettings(Context context, String data){
          FileOutputStream fOut = null;
          OutputStreamWriter osw = null;
          
          try{
           fOut = openFileOutput("settings.dat",MODE_PRIVATE);      
              osw = new OutputStreamWriter(fOut);
              osw.write(data);
              osw.flush();
              Toast.makeText(context, "Settings saved",Toast.LENGTH_SHORT).show();
              }
              catch (Exception e) {      
              e.printStackTrace();
              Toast.makeText(context, "Settings not saved",Toast.LENGTH_SHORT).show();
              }
              finally {
                 try {
                        osw.close();
                        fOut.close();
                        } catch (IOException e) {
                        e.printStackTrace();
                        }
              }
         }

    使用方法:
    WriteSettings(this,"setting0, setting1, setting2");
    String data[] = ReadSettings(this).split(",");

 

 初学Android, 初学JAVA,很不专业的找了一下相关资料,很不专业的还愣是没看全明白,还是老大给了个方案,照着做,还好没错。

在网上有看到过说写SD卡的路径要双斜杠,如://sdcard//t.txt,但我试下来双斜杠,单斜杠都可以。

写两个小函数,以供调用

删除文件函数,输入参数:文件名(全路径) 如 "/sdcard/test.txt"

public boolean DeleteFile(String filename)
  {
   File file;
  
   file = new File(filename);
   if (file.exists())
    file.delete();
   else
    return false;

   return true;
  }
 
 

写文件函数,输入参数:文件名, 输入缓冲首地址,数据长度
  public boolean WriteFile(String filename, char [] str, int length)
     {
      try
      {
       FileWriter fw = new FileWriter(filename);
       fw.write(str, 0, length);
       fw.flush();
       fw.close();
      }
      catch(IOException e)
      {
       e.printStackTrace();
       return false;
      }
      return true;
     }
 
 
 读文件函数,输入参数:文件名, 读取缓冲首地址,数据长度
  public boolean ReadFile(String filename, char [] str, int length)
     {    
      try
      {
       FileReader fr = new FileReader(filename);
       fr.read(str, 0, length);
       fr.close();
    }
    catch(IOException e)
    {
     e.printStackTrace();  
     return false;
    }
    return true;
     }

 

 

原创粉丝点击