点击文件夹或型,扒团老获取这个文件夹的路径,然后调用方法获取这个文件夹下的所有文件和文件夹,然后把这个文件夹下的所有文件和文件夹组织成List,然后把这个数据放到当前这个ListView的adapter里,刷新一春升下。就出来了 这是思路。
B. Android无root,获取其他应用内部存储的数据
最近在负责一个项目,需要获取其他应用的内部存储中的文件,即data/data/下的文件,并转存到sdcard上。有一点Android基础的都知道data/data/中的文件对其他应用是不可见的,在没有源码的条件下,无法直接访问data/data中的文件。问了公司的大佬,大佬提供了两种思路,一种是run-as命令进入data/data,直接;另一种是hook。具体怎么实施,且听我慢慢道来。
安装包是debug包(release包也可以利用反编译重新打包,变成debug包,网上有很多文章可以参考)
1、连接手机到电脑,打开usb调试
2、命令行中输入 adb shell run-as <包名>
示例:
com.ss.android.ugc.aweme(抖音)不是debug包,无法使用run-as命令。
com.example.yilialin.jsonreport(我自己写的app)是debug包,使用run-as命令可以进入data/data目录下,输入 ls ,可以看到data/data目录下的所有文件/文件夹
3、输入 cat <文件名> > <sdcard中的文件名> ,直接拷贝到sdcard中
示例:
不出现任何提示,表明已经成功拷贝到了sdcard中。
几行命令直接搞定
1、需要手工敲命令,难以实现自动化
2、debug包才能使用
没有限制,安装包是release包或者debug包都可以,手机不需要root
有关于xposed插件可以参考文章:https://blog.csdn.net/yzzst/article/details/47659479
https://blog.csdn.net/niubitianping/article/details/52571438
https://blog.csdn.net/niubitianping/article/details/52574650
其实无root也是可以使用virtualxposed的,将xposed插件和想要hook的app克隆到virtualxposed中就可以使用了。
不受root权限和debug包的限制
前期需要做的事情多,xposed插件编写比较麻烦
我研究了几个星期的xposed hook,才学会了怎么使用,原理还不是特别明白,先用着吧==
听别人说再多也只是纸上谈兵,关键是要自己动手操作,有很多问题都是在实施的过程中出现并解决的,在问题中学习不失为一种好方法。
奉上我的xposed插件,供学习参考,有什么不对的地方,还望不吝赐教!
https://github.com/Yiliayan/douyinxposed.git
C. android 怎样遍历文件夹下的文件(文件夹下可能还有文件夹)
java代码:
import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class ShuosouwenjianActivity extends Activity implements OnClickListener {
private File file;
private String path;
private String info;
private String key; //关键字
private TextView result; // 显示结果
private EditText et; // 编辑view
private Button search_btn; // button view
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
result = (TextView)findViewById(R.id.TextView_Result);
et = (EditText)findViewById(R.id.key);
search_btn = (Button)findViewById(R.id.button_search);
// file = new File(Environment.getExternalStorageDirectory().getPath());
file = new File("/sdcard/");
info = getString(R.string.info);
search_btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
path = "";
result.setText("");
key = et.getText().toString();
BrowserFile(file);
}
public void BrowserFile(File fileold) {
if (key.equals("")) {
Toast.makeText(this, getString(R.string.pleaseInput), Toast.LENGTH_LONG).show();
} else {
search(fileold);
if (result.getText().equals("")) {
Toast.makeText(this, getString(R.string.notFound), Toast.LENGTH_SHORT).show();
}
}
}
private void search(File fileold)
{
try{
File[] files=fileold.listFiles();
if(files.length>0)
{
for(int j=0;j<files.length;j++)
{
if(!files[j].isDirectory())
{
if(files[j].getName().indexOf(key)> -1)
{
path += "\n" + files[j].getPath();
result.setText(info+path);
//shuju.putString(files[j].getName().toString(),files[j].getPath().toString());
}
}
else{
this.search(files[j]);
}
}
}
}
catch(Exception e)
{
}
}
}
MAIN.XML代码:
<?xml version="1.0" encoding="utf-8"?>
< AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/widget0"
>
< Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button_search"
android:layout_x="253px"
android:layout_y="5px"
android:text="@string/toSearch"
/>
< EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/key"
android:text="821077962.db"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="370px"
android:id="@+id/TextView_Result"
android:layout_x="0px"
android:layout_y="60px"
/>
< /AbsoluteLayout>
strings.xml代码:
<?xml version="1.0" encoding="utf-8"?>
< resources>
< string name="hello">Hello World, Activity07!</string>
< string name="app_name">文件搜索</string>
< string name="toSearch">搜索</string>
< string name="info">系统SDCard目录文件路径:\n</string>
< string name="pleaseInput">请输入关键字!</string>
< string name="notFound">SD卡中没有相关文件!!</string>
< string name="pathError">读取路径出错!!</string>
< /resources>
D. 安卓开发怎么获取文件夹下面所有文件
这个是由于android中的安全机制的缘故,由于android继承了Linux系统的传统,对大歼于某个特定的目录有用户的权限,一共分为三种--可读,可写,可执行;虽然说可以设置某胡族个特定的目录的权限,但是对于目录里面的子目录和子文件都可以进行权限的设置,也就是说出了根目录权限之外,子目录本身的权限也决定了子目录可否访问,这一点裤仿弊需要清楚了解,所以在判断完了是否是目录之外,还需要在进行listFiles()获取File[]数据后判断获取的数组是否为空,如果为空的话,文件夹是不可访问的。
E. Android如何获取asset目录下所有文件的路径
package com.hangcheng.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
public class GetfilesFromAssets {
private Activity activity;
private String[] files;
public GetfilesFromAssets(Context context) {
this.activity = (Activity) context;
}
// public void deepFile(Context ctxDealFile, String path) {
// try {
// String str[] = ctxDealFile.getAssets().list(path);
// if (str.length > 0) {// 如果是目录
// File file = new File("/data/" + path);
// file.mkdirs();
// for (String string : str) {
// path = path + "/" + string;
// System.out.println("zhoulc:\t" + path);
// // textView.setText(textView.getText()+"\t"+path+"\t");
// deepFile(ctxDealFile, path);
// path = path.substring(0, path.lastIndexOf('/'));
// }
// } else {// 如果是文件
// InputStream is = ctxDealFile.getAssets().open(path);
// FileOutputStream fos = new FileOutputStream(new File("/data/"
// + path));
// byte[] buffer = new byte[1024];
// int count = 0;
// while (true) {
// count++;
// int len = is.read(buffer);
// if (len == -1) {
// break;
//敬穗腊 }
// fos.write(buffer, 0, len);
// }
// is.close();
// fos.close();
// }
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
//族搭 }
// }
public String[] getfileFromAssets(String path) {
AssetManager assetManager = activity.getAssets();
// String[] files;
try {
files = assetManager.list(path);
} catch (IOException e) {
//亮滑 TODO Auto-generated catch block
e.printStackTrace();
}
return files;
}
public List listHtmlOfAssets() {
List list = new ArrayList();
files = getfileFromAssets("html");
for (int i = 0; i < files.length; i++) {
HashMap map = new HashMap();
map.put("htmlname", files[i]);
list.add(map);
}
return list;
}
}
F. 安卓 文件夹目录整理
记录一下开发中遇到的一些目录。
在开发中会有内部存储器(Internal Storage)和外部存储器(External Storage)。
内部存储,路径:data/data/packageName/(此部分的根目录)。这个目录下的文件为应用私有的,其他的应用是无法访问的。同时此目录下的文件是会随应用的卸载而被删除。 读写此目录下的文件是不需要权限的。
- getDir(String name, int mode) 返回对应目录下的枝激File文件夹对象。
- getFilesDir() 返回根目录/files文件夹, Context.openFileInput() 和 Context.openFileOutput 都是这个文件夹。
- fileList() 返回的是files下的所有文件名
- deleteFile(String name) 删除files下指定名称的文件。
- getCacheDir() 该方法返回的是根目录/cache的File对象.当Android的内部猛轿袜存储容量过低时,android会自动清除缓存文件
外部储存,在此存储数据是不安全的。在这部分存储,个人可以分为两个部分来总结。
1.本应用相关目录
此部分路径为/storage/emulated/0/Android/data/packageName/。此目录下的文件会随软件的卸载而被删除。 在4.4之后读写此目录下的文件不需要权限 。但是这个目录下的文件可以被用户以及带有 WRITE_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 权限的应用读取或修改。
- getExternalFilesDir(String type) 返回/storage/emulated/0/Android/data/packageName/files/type文件夹,若type为 null 则返回/storage/emulated/0/Android/data/packageName/files文件夹。
- getExternalCacheDir() 返回帆空/storage/emulated/0/Android/data/packageName/cache文件夹
2.外部自定义目录
除1以外的目录。读写这部分文件需要 WRITE_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 权限, 6.0以上需要运行时权限。这部分文件是不会随应用被卸载而删除。
- Environment.getExternalStorageDirectory() 返回/storage/emulated/0文件。
G. android如何读取手机指定的某个文件夹下的所有图片的名称,语音名称
可以用java
IO读取图片文件,也可以用Android里面的mediastore先读取拦档该文件夹下的图片缩略图用ListView或者gridView等控件显示缩略图点击后显示详细图片等方法,为了防止oom推荐第二种方法,不过不氏衡瞎知道你那歼空是怎样的需求,MediaStore的用法你可以网上搜下,一大堆的。
H. android 如何批量获取raw文件夹中的文件
HER