data/data下数据 查看android应用_android /data/data 应用卸载 - CSDN
  • Androiddata/data/(your packagename)目录数据读写、删除操作

    一、数据存储

    App自身的数据存储在/data/data/packagename/ ,目录下,大致结构如下图

    这里写图片描述

    Activity提供了getCacheDir()和getFilesDir()方法:
    getCacheDir().getAbsolutePath()方法用于获取/data/data/packagename/cache目录

    getFilesDir().getAbsolutePath()方法用于获取/data/data/packagename/files目录

    getFilesDir().getParent()方法用于获取/data/data/packagename目录

    1、数据存储
    Activity提供了openFileOutput()方法可以用于把数据输出到文件中,文件的输出目录在/data/data/packagename/files中

    try {
    FileOutputStream os = openFileOutput("tongsiw.txt",MODE_PRIVATE);
    os.write("哈哈哈哈".getBytes());
    os.close();
    } catch (IOException e) {
     e.printStackTrace();
    }

    输出目录如图
    这里写图片描述

    openFileOutput()方法的第一参数用于指定文件名称,第二参数用于指定操作模式,有四种模式,分别为:
    Context.MODE_PRIVATE
    Context.MODE_APPEND
    Context.MODE_WORLD_READABLE
    Context.MODE_WORLD_WRITEABLE

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

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

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

    MODE_WORLD_READABLE:表示该文件可以被其他应用读取;

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

    另外操作模式可以叠加,如:

    FileOutputStream  os =  openFileOutput("tongsiw.txt",MODE_PRIVATE+MODE_APPEND);
    

    2、文件读写操作

    Activity提供了openFileInput()方法打开/data/data/packagename/files中的文件

      FileInputStream inputStream = openFileInput("tongsiw.txt");
                ByteArrayOutputStream outputStream = new  ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len = -1;
                while ((len = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, len);
                }
                inputStream.close();
                outputStream.close();
                String s = outputStream.toString();
                Toast.makeText(this, s, 0).show();
            } catch (IOException e) {
                e.printStackTrace();
            }

    二、数据删除

    递归删除

    /**递归删除*/
        public  void deleteFolder(File file) {
            if (!file.exists())
                return;
    
            if (file.isDirectory()) {
                File files[] = file.listFiles();
                for (int i = 0; i < files.length; i++) {
                    deleteFolder(files[i]);
                }
            }
            file.delete();
        }

    删除操作

      //删除配置文件目录shared_prefs;
      //路径:/data/data/packagename
      String path = getFilesDir().getParent();
      deleteFolder(new File(path + "/shared_prefs"));
    
    
      //清空缓存目录;
      //路径 /data/data/packagename/cache
      File file_cache = getCacheDir();
      deleteFolder(file_cache);
    
      //清空file目录;
      //路径 /data/data/packagename/files
      File file_file = getFilesDir();
      deleteFolder(file_file);

    就到这了

    展开全文
  • android关于data/data/目录,各应用之间的私有数据读写 2013年05月01日 ⁄ 综合⁄ 共 4991字 ⁄ 字号 小 中 大 ⁄ 评论关闭 下面简单介绍一下,我的方法,可能有点笨拙。 我主要用的是Context....

    android关于data/data/目录下,各应用之间的私有数据读写

    2013年05月01日 ⁄ 综合⁄ 共 4991字 ⁄ 字号 评论关闭

    下面简单介绍一下,我的方法,可能有点笨拙。

    我主要用的是Context.openFileOutput()和Context.openFileInput()方法。

    测试部分,被用到的应用先存入一个文件,做好被调用准备。代码如下:

        //定义文件的名称  
        String oldfileName = "/data/data/com.data.datatest/files/hy.txt";  
    
        //写入和读出的数据信息  
        String message = "来,战个痛快!";  
        TextView test;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            test = (TextView) findViewById(R.id.testTextview);
            File aFile = new File(oldfileName);
            writeDatabaseFile(aFile, message);
            test.setText(message);
        }
        
        public void writeDatabaseFile(File fileName,String fileContext){
        	try {
        		Log.e("1111", "fileName.getName()= "+fileName.getName());		//设置文件权限
        		FileOutputStream fileOutputStream = openFileOutput("hh.txt",
        				Context.MODE_WORLD_READABLE+ Context.MODE_WORLD_WRITEABLE);
    			byte[] temBytes = fileContext.getBytes();
    			fileOutputStream.write(temBytes);
    			fileOutputStream.close(); 
    		} catch (Exception e) {
    			// TODO: handle exception
    			e.printStackTrace();
    		}
        }

    至此在应用程序里的/data/data/包名/files/路径下有个hh.txt文件了。权限为

    下面为调用该文件的应用代码:

    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		try {
    			Context c = createPackageContext("com.data.datatest",
    					Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
    			readFileData(c);
    		} catch (NameNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		setContentView(R.layout.activity_main);
    		TextView aTextView = (TextView) findViewById(R.id.useText);
    		aTextView.setText(result);
    	}
    	
    	// 打开指定文件,读取其数据,返回字符串对象
    	public String readFileData(Context tempContext) {
    		try {
    			FileInputStream fin = tempContext.openFileInput("hh.txt");
    			FileOutputStream outputStream = openFileOutput("hy.txt",
    					Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
    			int lenght = fin.available(); // 获取文件长度
    			byte[] buffer = new byte[lenght];
    			int c;
    			while ((c = fin.read(buffer)) > 0) {
    				outputStream.write(buffer, 0, c);
    			}
    			fin.close();
    			outputStream.close();
    			// 将byte数组转换成指定格式的字符串
    			result = EncodingUtils.getString(buffer, ENCODING);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return result;
    	}

    Context c = createPackageContext("com.data.datatest",Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);

    Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。

    这个方法有两个参数:

    1. packageName 包名,要得到的应用的包名

    2. flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,即可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个歌标志位的话,有些功能就用不了的,会出现安全警告。

    代码里将Context  c 作为参数传入readFileData里面,由于Context 有openFileInput函数,通过这个函数就可以直接得到你想得到的应用程序包里面的Files文件夹下的文件,而这里的openFileOutput("hy.txt",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);则是在自己应用里建立hy.txt文件,然后通过输入流写进输出流,就实现了拷贝别的应用里的文件到自己的应用里。

    接下来就是写别的应用里的数据,方法类似,主要是context的使用。

    	public void writeFileAndSave(Context tempContext) throws IOException{
    		String testStr = "美得不得了";
    		FileOutputStream outputStream = tempContext.openFileOutput("hh.txt",
    				Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
    		byte[] buffer = testStr.getBytes();
    		outputStream.write(buffer);
    		outputStream.close();
    	}

    各应用之间数据读写主要是context的使用。另外,应用中的cache,files的权限是一样的。都能互相访问,但是如果是自己创建的文件夹则只有被自己应用调用的权限。

    另外一种方法,比较简单:就是设置文件夹和文件权限。

    网上有可以修改自己建的文件夹和文件的权限,我又测试了一下,发现也能实现,被调用的程序包的文件,设置权限:

        public void initChmodDir(){
    		File destDir = new File("/data/data/com.data.datatest/test/mmp.txt");
    		if (!destDir.exists()) {
    			destDir.getParentFile().mkdirs();
    		}
    		writeDatabaseFile(destDir, "你比大S多个B,大SB!");
    		Process p;
    		int status = -1;
    		try {
    			p = Runtime.getRuntime().exec("chmod 777 " + destDir);
    			p = Runtime.getRuntime().exec("chmod 777 " + destDir.getParentFile());
    			status = p.waitFor();
    		} catch (IOException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		if (status == 0) {    
    			//chmod succeed   
    		    Toast.makeText(this, "chmod succeed", Toast.LENGTH_LONG).show();
    		} else {    
    			//chmod failed 
    			Toast.makeText(this, "chmod failed", Toast.LENGTH_LONG).show();
    		}
        }
        public void writeDatabaseFile(File fileName,String fileContext){
        	try {
        		Log.e("1111", "fileName.getName()= "+fileName.getName());
        		FileOutputStream fileOutputStream = new FileOutputStream(fileName);
    //    		FileOutputStream fileOutputStream = openFileOutput("hh.txt",
    //    				Context.MODE_WORLD_READABLE+ Context.MODE_WORLD_WRITEABLE);
    			byte[] temBytes = fileContext.getBytes();
    			fileOutputStream.write(temBytes);
    			fileOutputStream.close(); 
    		} catch (Exception e) {
    			// TODO: handle exception
    			e.printStackTrace();
    		}
        }

    然后是调用者部分:

    	public String readTestFileData(Context tempContext) {
    		File oldFile = new File("/data/data/com.data.datatest/test/mmp.txt");
    		if (oldFile.exists()) {
    			File newfile = new File("/data/data/com.usedata.usefile/huyi/hy.txt");
    			if (!newfile.exists()) {
    				newfile.getParentFile().mkdirs();
    			}
    			writeDatabaseFile(newfile, oldFile);
    		}
    		return result;
    	}
    	
    	public void writeDatabaseFile(File fileName,File oldFile){
        	try {
        		FileInputStream inputStream = new FileInputStream(oldFile);
        		FileOutputStream fileOutputStream = new FileOutputStream(fileName);
        		int lenght = inputStream.available(); // 获取文件长度
    			byte[] buffer = new byte[lenght];
    			int c;
    			while ((c = inputStream.read(buffer)) > 0) {
    				fileOutputStream.write(buffer, 0, c);
    			}
    			fileOutputStream.close(); 
    		} catch (Exception e) {
    			// TODO: handle exception
    			e.printStackTrace();
    		}
        }

    前后截图为:

    验证过后发现权限确实改了,而且文件也复制过来了,包括文件内容。

    总结,如果用openFileInput或者openFileOutput就需要获取被调用的context。如果不用就需要修改被调用文件夹和文件的权限。


    展开全文
  • 文件之获取文件夹路径/data/data/     应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。 大部分应用是直接在SDCard的根目录创建一个文件夹,然后把数据保存在该文件夹中...

    文件之获取文件夹路径/data/data/

     

     

    应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。

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

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

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

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

    总结一下android 中的几种目录:

    一、 files
    1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。
    2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream对象。
    3. Context.fileList(),返回files下所有的文件名,返回的是String[]对象。
    4. Context.deleteFile(String),删除files下指定名称的文件。

    5. Context.getExternalFilesDir()方法可以获取到   SDCard/Android/data/youPackageName/files/ 目录,一般放一些长时间保存的数据


     二、cache
    1. Context.getCacheDir(),该方法返回   /data/data/youPackageName/cache的File对象,这个文件里面的数据在设备内存不足的时候,会被系统删除数据。注意:你不能依赖系统帮你删除这些文件,当这个文件夹里面的数据超过1MB的时候,系统会删除这个文件夹里面的数据。

    2. Context.getExternalCacheDir()方法可以获取到    SDCard/Android/data/youPackageName/cache/目录,一般存放临时缓存数据

     三、custom dir

    getDir(String name, int mode),返回    /data/data/youPackageName/ 下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。

    展开全文
  • 大部分应用是直接在SDCard的根目录创建一个文件夹,然后把数据保存在该文件夹中。 这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。 如果你想让你的应用被卸载后,与该应用相...

    参考:https://www.cnblogs.com/awkflf11/articles/5178141.html

    应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。
    
    大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。
    这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
    如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?
    
    通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
    通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
    
    如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。
    
    而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项
    
    总结一下android 中的几种目录:
    
    一、 files
    1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。
    2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream对象。
    3. Context.fileList(),返回files下所有的文件名,返回的是String[]对象。
    4. Context.deleteFile(String),删除files下指定名称的文件。
    
    5. Context.getExternalFilesDir()方法可以获取到   SDCard/Android/data/youPackageName/files/ 目录,一般放一些长时间保存的数据
    
    
     二、cache
    1. Context.getCacheDir(),该方法返回   /data/data/youPackageName/cache的File对象,这个文件里面的数据在设备内存不足的时候,会被系统删除数据。注意:你不能依赖系统帮你删除这些文件,当这个文件夹里面的数据超过1MB的时候,系统会删除这个文件夹里面的数据。
    
    2. Context.getExternalCacheDir()方法可以获取到    SDCard/Android/data/youPackageName/cache/目录,一般存放临时缓存数据
    
     三、custom dir
    
    getDir(String name, int mode),返回    /data/data/youPackageName/ 下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。
    
     
    
    创建文件的权限
    
    MODE_PRIVATE:说明该文件只能被当前的应用程序所读写
    
    MODE_APPEND:以追加方式打开该文件,应用程序可以向该文件中追加内容。
    
    MODE_WORLD_READABLE:该文件的内容可以被其他的应用程序所读取
    
    MODE_WORLD_WRITEABLE:该文件的内容可以被其他的应用程序所读、写
    

    记录

    展开全文
  • private ClearUserDataObserver mClearDataObserver; class ClearUserDataObserver extends IPackageDataObserver.Stub { public void onRemoveCompleted(final String packageName, final boolean succ
  • Android下/data/data/<package_name>/files读写权限 今天将更新模块拿到android上面测试的时候,发现在创建writablepath.."upd/"目录的时候出现Permission Denied提示BTW:我使用的是lfs来...
  • 一个apk安装后,在android系统中有一个私有的目录供存储数据用,在/data/data/package_name/下。关于这个目录的说明,网上有很多说明。对于应用而言,操作这个目录是没有问题的。但对于一些必须手动创建的,比如程序...
  • A) /data/app/目录本身要su的访问权限,所以无法new File("/data/app"); 或许你不知道的: B) 初始安装时,文件被保存在: data/app + [包名].apk 覆盖安装N次后,文件名为: data/app + [包名]-N.apk...
  • 目录 一、基本方法 二、内外部存储概念 1、内部存储 2、外部存储 ...2、/data/data,/data/user/0 一、基本方法 今天刚好想弄清楚Android的文件路径问题,就写了一些的方法试试路径,得出结果如下...
  • 关于data/data/包名 目录1.关于此目录此目录是app的私有目录,本身可以访问,外部程序没有访问权限,一些不想让用户看到的文件可以往这里边扔;此目录在程序卸载后将被删除;对应设置中的“数据”一项,如果清空数据...
  •  一、写出数据到files文件夹中,Activity提供了openFileOutput()方法,可以把数据输出到/data/data//files的文件夹中。 [java] view plain copy   public class FileActivit
  • Android 将少量的数据文件保存在 data/data 目录 Published on 2011 年 8 月 9 日by LittleDai in AndroidAndroid 中,通常情况 data 目录是需要 root 权限才能访问的,每个应用程序在
  • 1. Context.getFilesDir(),该方法返回/data/data/appPackageName/files的File对象。 2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files的文件,返回的是FileInputStream和...
  • 大部分应用是直接在SDCard的根目录创建一个文件夹,然后把数据保存在该文件夹中。 这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。 如果你想让你的应用被卸载后,与该应用相关的数据也清除掉...
  • 获取Android/data/目录

    2019-03-11 17:49:16
    通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据,卸载时会跟随卸载 posted @ 2018-08-07 17:13 ...
  • String printTxtPath = getApplicationContext().getPackageResourcePath() + "/files/" + fileName...输出: /data/app/com.example.fileoperation-2.apk/files/printMenu.txt String printTxtPath = getApplicatio
  • package yu.bin; import java.io.FileOutputStream; import android.app.Activity; import android.os.Bundle; import android.view.View;...import android.view.View.OnClickListener;...import android.widget.Butt
  • 获取SD卡下Android/data/下文件 通常情况下多数应用程序都会将缓存的位置选择为 /sdcard/Android/data//cache 这个路径。选择在这个位置有两点好处:第一,这是存储在SD卡上的,因此即使缓存再多的数据也...
  • 简单的文本存储到/data/data/package/files,将数据以Java流的格式写入文件和读取
  •  一、写出数据到files文件夹中,Activity提供了openFileOutput()方法,可以把数据输出到/data/data//files的文件夹中。 [java] view plaincopyprint? public class FileActivity extends A
1 2 3 4 5 ... 20
收藏数 141,333
精华内容 56,533
关键字:

data/data下数据 查看android应用