Android学习(十一) File文件操作

File类

  1、获取当前应用程序的目录:  

  this.getFilesDir();                                             //获取当前应用程序的数据目录

  this.getCacheDir();                                          //获取当前应用程序的缓存目录,资源不够用时,可能会被清除。

  this.getDir("userdata", MODE_PRIVATE);    //获取当前用户程序下自定义目录。

  2、应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
  如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

  获取SDCard目录

  Environment.getExternalStorageDirectory();            //获取内存卡的目录,需要权限,如果放在此文件夹中,卸载时不会被清除。

  在AndroidManifest.xml中添加如下代码

<!-- 在SDCard中创建与删除文件权限 -->

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

<!-- 往SDCard写入数据权限 -->

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

  this.getExternalFilesDir("test_dir");                  //将数据保存到外部内存卡的应用程序数据目录。参数为files下的文件名称。

  通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据

 

      this.getExternalCacheDir();                             //将数据保存到外部存储卡的应用程序缓存目录中。可以被清除。 

  通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

  

  如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

  而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项 

  如果要保存下载的内容,就不要放在以上目录下

 

测试代码:

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    tools:context=".MainActivity" >



    <Button android:id="@+id/btn1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="保存文件"/>

    

    <Button android:id="@+id/btn2"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="读取文件"/>



</LinearLayout>

 

 

main.java

package com.example.filedemo1;



import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;



import android.app.Activity;

import android.os.Bundle;

import android.os.Environment;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;



public class MainActivity extends Activity {



    Button btn1;

    Button btn2;

    File dir;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);



        btn1 = (Button) findViewById(R.id.btn1);

        btn2 = (Button) findViewById(R.id.btn2);



        // 获取当前应用程序的数据目录

        // dir = this.getFilesDir();



        // 获取当前应用程序的缓存目录,资源不够用时,可能会被清除。

        // dir = this.getCacheDir();



        // 获取当前用户程序下自定义目录。

        // dir = this.getDir("userdata", MODE_PRIVATE);



        // 获取当前SDCard目录

        dir = Environment.getExternalStorageDirectory();



        //Log.i("dir", dir.toString());

        

        //保存文件

        btn1.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                File newfile = new File(dir, "test.txt");

                try {

                    FileOutputStream fos = new FileOutputStream(newfile);

                    String content = "Java中的文件写入,测试数据!";

                    fos.write(content.getBytes());

                    fos.close();



                    Toast.makeText(MainActivity.this, "写入成功", 1).show();

                } catch (FileNotFoundException e) {

                    e.printStackTrace();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        });

        

        //读取文件

        btn2.setOnClickListener(new OnClickListener() {



            @Override

            public void onClick(View v) {

                File newfile = new File(dir, "test.txt");

                try {

                    FileInputStream fis = new FileInputStream(newfile);

                    byte[] data = new byte[fis.available()];

                    fis.read(data);

                    String content = new String(data);



                    Toast.makeText(MainActivity.this, content, 1).show();

                    fis.close();

                } catch (FileNotFoundException e) {

                    e.printStackTrace();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        });

    }



}

 

你可能感兴趣的:(Android学习)