點擊文件夾或型,扒團老獲取這個文件夾的路徑,然後調用方法獲取這個文件夾下的所有文件和文件夾,然後把這個文件夾下的所有文件和文件夾組織成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