数据的存储与访问

Android为数据存储提供了如下几种方式:
文件
SharedPreferences(参数)
SQLite数据库

内容提供者(Content provider)
网络



Activity提供了openFileOutput()方法可以用于把数据输出到文件中,openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录。openFileOutput()方法的第二参数用于指定操作模式有四种模式,分别为:
Context.MODE_PRIVATE    =  0
Context.MODE_APPEND    =  32768
Context.MODE_WORLD_READABLE =  1
Context.MODE_WORLD_WRITEABLE =  2


Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

For example:

public void save(String fileName, String content, int mode) {
        // 记住密码
        try {
            // 通过openFileputStream打开文件
            FileOutputStream fos = context.openFileOutput(fileName, mode);
            fos.write(content.getBytes());
            fos.flush();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public String[] readFile(String fileName) {
        String[] split = null;
        File file = new File(context.getFilesDir(),fileName);
        if (file.exists()) {
            try {
                // 根据文件创建出文件的输入流
                InputStream is = new FileInputStream(file);
                // 通过工具类读取文件的内容
                String value = StreamTools.streamToStr(is);
                // 按照分号进行拆分
                split = value.split(";");

            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        // 记得返回声明的对象
        return split;
    }


调用方法:internalStorage.save(fileName, content,Context.MODE_PRIVATE);

String values[] = internalStorage.readFile(fileName);



我们也可以将file文件保存到外部的存储设备中,如SDCrad:

在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

通过方法调用的不同,存放路径可分公有文件私密文件。公有文件可供所有人读写,但私密文件却只能够给自己看到。当应用被卸载时,公有文件依然会保留,而私密文件会随之被删除。

公有文件的方法:

For example:

public void save(String dir,String content,String fileName) {
        //演示公共文件
        File sdCardDir = Environment.getExternalStoragePublicDirectory(dir);
        
        File file = new File(sdCardDir,fileName);
        try {
            FileOutputStream raf = new FileOutputStream(file);
            raf.write(content.getBytes());
            raf.flush();
            raf.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public String[] readFile(String dir, String fileName) {
        //声明返回值
        String[] split = null;
        
        File pdFile = new File(Environment.getExternalStoragePublicDirectory(dir), fileName);
        if (pdFile.exists()) {
            try {
                // 根据文件创建出文件的输入流
                InputStream is = new FileInputStream(pdFile);
                // 通过工具类读取文件的内容
                String value = StreamTools.streamToStr(is);
                // 按照分号进行拆分
                split = value.split(";");
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return split;
    }


调用的方法:String values[] = internalStorage.readFile(Environment.DIRECTORY_DOWNLOADS,fileName);

internalStorage.save(Environment.DIRECTORY_DOWNLOADS,content,fileName);


私有文件的方法:

For example:

public void save(String dir,String content,String fileName) {
        //演示公共文件
        File sdCardDir = context.getExternalFilesDir(dir);
        
        File file = new File(sdCardDir,fileName);
        try {
            FileOutputStream raf = new FileOutputStream(file);
            raf.write(content.getBytes());
            raf.flush();
            raf.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public String[] readFile(String dir, String fileName) {
        //声明返回值
        String[] split = null;
        
        File pdFile = new File(context.getExternalFilesDir(dir), fileName);
        if (pdFile.exists()) {
            try {
                // 根据文件创建出文件的输入流
                InputStream is = new FileInputStream(pdFile);
                // 通过工具类读取文件的内容
                String value = StreamTools.streamToStr(is);
                // 按照分号进行拆分
                split = value.split(";");
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return split;
    }


调用的方法:String values[] = internalStorage.readFile(Environment.DIRECTORY_DOWNLOADS,fileName);

internalStorage.save(Environment.DIRECTORY_DOWNLOADS,content,fileName);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值