7.使用api读取文件路径getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()

getCacheDir()方法用于获取/data/data/<application package>/cache目录

getFilesDir()方法用于获取/data/data/<application package>/files目录


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

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

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


较优秀的程序都会专门写一个方法来获取缓存地址,如下所示:

public String getDiskCacheDir(Context context) {  
    String cachePath = null;  
    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())  
            || !Environment.isExternalStorageRemovable()) {  
        cachePath = context.getExternalCacheDir().getPath();  
    } else {  
        cachePath = context.getCacheDir().getPath();  
    }  
    return cachePath;  
}

可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来获取缓存路径。前者获取到的就是 /sdcard/Android/data/<application package>/cache 这个路径,而后者获取到的是 /data/data/<application package>/cache 这个路径。


数据存储:
1.内存
2.内存设备--->应用名--->(cache/files/其他名字):用的少
3.内存设备--->Android--->data--->应用名--->(cache/files/其他名字):用的多
4.sd卡--->应用名--->(files/cache/其他名字):用得少
5.sd卡--->Android--->data--->应用名--->(cache/files/其他名字):用的多

getCacheDir()用法示例

public class MainActivity extends Activity {

    private EditText et_name;
	private EditText et_pass;


	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        et_name = (EditText) findViewById(R.id.et_name);
    	et_pass = (EditText) findViewById(R.id.et_pass);
        read();
    }
    
    //读取文件
    public void read(){
    	//使用api读取路径,下面2种方法效果一样
    	 //File file = new File("data/data/com.ldw.rwinrom/12.txt");
    	 File file = new File(getFilesDir(),"123.txt");
    	 if(file.exists()){
	    	 try {
	    		 
				FileInputStream fis = new FileInputStream(file);
				//把字节流转换成字符流
				BufferedReader br = new BufferedReader(new InputStreamReader(fis));
				//读取txt里面的数据,readLine可以读取一行数据
				String text = br.readLine();
				String[] s = text.split("==");
		    	
		    	et_name.setText(s[0]);
		    	et_pass.setText(s[1]);
		    	fis.close();
		    	br.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	 
    	 }
    }

    //点击登陆写文件
    public void login(View v){
    	
    	CheckBox cb = (CheckBox) findViewById(R.id.cb);
    	String name = et_name.getText().toString();
    	String password = et_pass.getText().toString();
    	
    	if(cb.isChecked()){
    		//data/data/com.ldw.rwinrom:存储空间的路径
    		//File file = new File("data/data/com.ldw.rwinrom/12.txt");
    		File file = new File(getFilesDir(),"123.txt");
    		
    		try {
    			FileOutputStream fos = new FileOutputStream(file);
				fos.write((name + "==" + password).getBytes());
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	}
    	
    	Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
    	
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值