JNI 檔案遍歷
1.引入#include "dirent.h"
2.相關結構體
(1)DIR
struct DIR {
struct dirent ent;
struct _WDIR *wdirp;
};
typedef struct DIR DIR;
(2)dirent
struct dirent {
long d_ino; /* Always zero */
unsigned short d_reclen; /* Structure size */
size_t d_namlen; /* Length of name without \0 */
int d_type; /* File type */
char d_name[PATH_MAX]; /* File name */
};
typedef struct dirent dirent;
2.c++遍歷檔案
void showAllFiles(string dir_name) {
if (dir_name.empty()) {
LOGE("dir_name is null !");
return;
}
DIR *dir = opendir(dir_name.c_str());
if (NULL == dir) {
LOGE("Can not open dir,Check path or permission!");
return;
}
dirent *file;
while ((file = readdir(dir)) != NULL) { //類似BufferedReader.readLine(),不過這裡返回是dirnet*,不是string
if (file->d_type == DT_DIR) { //是目錄則遞迴
string filePath = dir_name + "/" + file->d_name;
showAllFiles(filePath);
} else { //是檔案則輸出檔名
LOGE("filePath:%s%s", dir_name.c_str(), file->d_name);
}
}
closedir(dir); //opendir(char* dir)後要closedir(DIR *dir )
}
3.java變數檔案,這裡篩選目錄下的所以txt檔案
fun showJavaAllFiels(path:String){
var file: File = File(path)
if(file.exists()){
for(fileitm in file.listFiles()){
if (fileitm.isFile){
if(fileitm.name.endsWith(".txt"))
Log.e("native",path+"/"+fileitm.name)
}else{
showJavaAllFiels(path+"/"+fileitm.name)
}
}
}else{
Log.e("native","file is not exit!")
}
}
4.讀取txt檔案
fun readTxtFile(path:String){
var file = File(path)
if(file.exists()){
try {
//InputStream 是位元組輸入流的所有類的超類,一般我們使用它的子類,如FileInputStream等.
//OutputStream是位元組輸出流的所有類的超類,一般我們使用它的子類,如FileOutputStream等.
var fileInPutString = FileInputStream(file)
//InputStreamReader 是位元組流通向字元流的橋樑,它將位元組流轉換為字元流.
//OutputStreamWriter是字元流通向位元組流的橋樑,它將字元流轉換為位元組流.
var inputStreamReader = InputStreamReader(fileInPutString)
//BufferedReader從字元輸入流中讀取文字,緩衝各個字元
//BufferedWriter將文字寫入字元輸出流,緩衝各個字元
var bufferReader = BufferedReader(inputStreamReader)
var txt:String =""
var i= 0
while (bufferReader.readLine()?.also { txt = it }!=null){
i++;
Log.e("txt",i.toString()+txt)
}
bufferReader.close()
inputStreamReader.close()
fileInPutString.close()
}catch (e:IOException){
}
}
}
5.also擴充套件函式是和let相同,函式體內使用it代表呼叫物件object,不同點是返回值是當前物件,let返回的是最後一行或指定的return表示式。?.also{}表示object不為null才會執行函式體。
相關文章
- 遍歷目錄下的所有檔案
- 迭代及用遞迴遍歷File檔案遞迴
- matlab遍歷資料夾下的所有檔案Matlab
- Linux迴圈遍歷所有檔案,刪除指定字尾名檔案Linux
- VBA遍歷 Excel 合併到一個 Excel 檔案Excel
- Godot遍歷目錄下檔案,並建立按鈕Go
- PHP超低記憶體遍歷目錄檔案和讀取超大檔案PHP記憶體
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- JNI初步(五)jni ndk 一個.so檔案依賴另一個.so檔案的寫法
- python遍歷之批次更改檔名Python
- 利用 python 遍歷多級資料夾處理不同檔案Python
- ASP.NET Core 中的檔案提供程式 遍歷資料夾讀取檔案資訊ASP.NET
- 比ls快8倍?百萬級檔案遍歷的奇技淫巧
- js的map遍歷和array遍歷JS
- Java遞迴遍歷資料夾及檔案過濾器使用(FileFilter)Java遞迴過濾器Filter
- 遍歷 FlowDocument
- Linuxshell遍歷Linux
- jQuery 遍歷jQuery
- c# 上傳壓縮包 解壓,遍歷資料夾和檔案C#
- Keil一鍵新增.c檔案和標頭檔案路徑指令碼--可遍歷新增整個資料夾指令碼
- java 壓縮包 遍歷解壓 zip 和 7z 指定格式檔案Java
- 如何遍歷 HashMap,遍歷HashMap 的 5 種最佳方式HashMap
- jQuery的遍歷結構設計之遍歷同胞jQuery
- jQuery的遍歷結構設計之遍歷祖先jQuery
- 陣列遍歷陣列
- 元組遍歷
- 集合迭代/遍歷
- TDictionary 的 遍歷
- jQuery 遍歷 – 祖先jQuery
- jQuery 遍歷方法jQuery
- 資料遍歷
- jstl forEach遍歷JS
- 非遞迴實現先序遍歷和中序遍歷遞迴
- 一個用於遍歷並檢視ttf字型檔案內所含unicode的python指令碼UnicodePython指令碼
- IO相關的操作類封裝【檔案的讀取遍歷建立等等】(工具五)封裝
- Python 遍歷檔案每一行判斷是否只有一個換行符詳解Python
- DOM元素的遍歷
- Map迴圈遍歷