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

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

数据读取

view plain copy to clipboard print ?
  1. public static Stringread(Contextcontext,Stringfile){
  2. Stringdata= "" ;
  3. try {
  4. FileInputStreamstream=context.openFileInput(file);
  5. StringBuffersb= 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. } catch (FileNotFoundExceptione){
  13. } catch (IOExceptione){
  14. }
  15. return data;
  16. }

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

数据写入

view plain copy to clipboard print ?
  1. public static void write(Contextcontext,Stringfile,Stringmsg){
  2. try {
  3. FileOutputStreamstream=context.openFileOutput(file,
  4. Context.MODE_WORLD_WRITEABLE);
  5. stream.write(msg.getBytes());
  6. stream.flush();
  7. stream.close();
  8. } catch (FileNotFoundExceptione){
  9. } catch (IOExceptione){
  10. }
  11. }

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

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

view plain copy to clipboard print ?
  1. public static Propertiesload(Contextcontext,Stringfile){
  2. Propertiesproperties= new Properties();
  3. try {
  4. FileInputStreamstream=context.openFileInput(file);
  5. properties.load(stream);
  6. } catch (FileNotFoundExceptione){
  7. } catch (IOExceptione){
  8. }
  9. return properties;
  10. }
  11. public static void store(Contextcontext,Stringfile,Propertiesproperties){
  12. try {
  13. FileOutputStreamstream=context.openFileOutput(file,
  14. Context.MODE_WORLD_WRITEABLE);
  15. properties.store(stream, "" );
  16. } catch (FileNotFoundExceptione){
  17. } catch (IOExceptione){
  18. }
  19. } 编程中文件读写是少不了的,如下:

    读:
    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;
}

更多相关文章

  1. Android本地数据存储之.txt文件存储读写
  2. 使用Kotlin开发Android 扩展函数(Extensions)
  3. Android Json 使用jsonschema2pojo生成.java文件文件
  4. android camera以时间来命名照片文件
  5. android编辑布局文件时非要降低api level或者更改主题才能显示布
  6. Android学习笔记-Android非布局activity中布局文件及控件加载方
  7. 给Android增加分享库.so文件
  8. Android的log保存到文件上查看
  9. Android应用程序中Manifest.java文件的介绍

随机推荐

  1. android中Selector中的相关属性及配置写
  2. Android的两种拍照方法
  3. android Thumbnail攻略
  4. Android OpenGL 编写简单滤镜
  5. Android之TextView属性列表
  6. Android Span的各种使用方法,简单、易懂、
  7. android适配不同分辨率的手机
  8. Android 之父的手机公司,关了
  9. Android 为 Android 开发访问 JAX-RS Web
  10. android电话流程(打电话,接电话,挂断电话)