数据存储(五种方式二)-文件存储

文件存储

1.SharedPreference只能保存一些简单的数据,要想存储更多类型的数据,需要使用文件的存储操作。有两种形式:

形式一:直接利用Activity提供的文件操作方法。此类操作的所有文件路径只能是“data\data\<packagename>\files\文件名称”。

形式二:利用Java IO流执行操作。此类操作的文件可以保存在任意路径下,但需要为其操作授权。

利用Activity类操作数据文件

1.文件操作的方法只有两个:一个是进行文件的输出(openFileOutputStream(),返回OutputStream),另一个是进行文件的输入(openFileInputStream(),返回InputStream),这两个方法返回的类型都是Java IO流中的字节操作流对象。

使用openFileInput()和openFileOutput()方法进行写入/读取写入操作时,接收的文件中不能包含任何的分隔符(\),只能写文件名称,而文件名称会默认保存在“data\data\<package name>\files\”目录中。

2.保存文件

publicclass FileOperate extends Activity {

    private static final String FILENAME ="mldn.txt" ; // 设置文件名称

    @Override

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

        FileOutputStream output = null ;    // 接收文件输出对象

        try {//设置输出文件的名称,及文件创建模式

            output =super.openFileOutput(FILENAME, Activity.MODE_PRIVATE) ;

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        }

        PrintStream out = newPrintStream(output) ; // 输出方便

        out.println("姓名:李华;") ;

        out.println("年龄:20;") ;

        out.println("地址:天方夜谈学院。") ;

        out.close() ;   // 资源一定要关闭,关闭流

    }

}

3.读取文件:

publicclass FileOperate extends Activity {

    private static final String FILENAME ="mldn.txt" ; // 设置文件名称

    private TextView msg = null ;       // 文本组件

    @Override

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

        this.msg = (TextView)super.findViewById(R.id.msg) ;

        FileInputStream input = null ;

        try {

        input = super.openFileInput(FILENAME) ; // 取得输入流

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        }

        Scanner scan = new Scanner(input) ;

        while(scan.hasNext()) {

            this.msg.append(scan.next() +"\n") ;

        }

        scan.close() ;

    }

}

利用IO流操作文件

1.以上程序直接将文件保存在手机的默认存储空间,要想把文件保存在自定义目录及sdcard上,可以使用传统的IO流完成。

2.向sdcard上保存文件

publicclass FileOperate extends Activity {

    private static final String FILENAME ="/mnt/sdcard/mldndata/mymldn.txt" ;  //设置文件名称

    @Override

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

        File file = new File(FILENAME) ;    // 定义要操作的文件

        if(!file.getParentFile().exists()) {

            file.getParentFile().mkdirs() ; // 创建父文件夹路径

        }

        PrintStream out = null;//打印流对象,用于输出

        try {

            out = new PrintStream(newFileOutputStream(file));

            out.println("天方夜谭学院(MLDN,www.baidu.cn),作者:李华");

        } catch (Exception e) {

            e.printStackTrace() ;

        } finally { // 一定要关闭流

            if(out != null) {

                out.close() ;

            }

        }

    }

}

 

由于用到外部设备(sdcard),所以要为程序配置相应的权限。

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3.判断sdcard是否存在,如果存在则保存;否则提示不存在,无法保存。要实现该功能,要使用android.os.Environment类取得目录的信息。

publicclass FileOperate extends Activity {

    private static final String FILENAME ="mymldn.txt" ;   // 设置文件名称

    private static final String DIR ="mldndata" ;  // 操作文件夹的名称

    @Override

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

       

    //如果sdcard存在则创建文件便于接下来的操作    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

            File file = new File(Environment.getExternalStorageDirectory()

                    + File.separator + DIR +File.separator + FILENAME); // 定义要操作的文件

            if (!file.getParentFile().exists()){

                file.getParentFile().mkdirs();// 创建父文件夹路径

            }

            PrintStream out = null;//打印流对象用于输出

            try {

                out = new PrintStream(newFileOutputStream(file));

                out.println("天方夜谭学院(MLDN,www.MLDNJAVA.cn),作者:李华");

            } catch (Exception e) {

                e.printStackTrace();

            } finally { // 一定要关闭流

                if (out != null) {

                    out.close();

                }

            }

        } else {

            Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show() ;

        }

    }

}

参考文章:Android开发实战经典

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值