<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<link href="../css/mui.min.css" rel="stylesheet" />
<header class="mui-bar mui-bar-nav">
<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
<h1 class="mui-title">文件查找</h1>
</header>
</head>
<body>
<div class="mui-content">
<ul id="list" class="mui-table-view mui-table-view-chevron"></ul>
</div>
<script src="../js/mui.min.js"></script>
<script src="../js/njs-io.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var nowFileType;
var subRoot = null;
var lockOadWebview = null;
mui.init({
/*preloadPages: [{
id: 'lock-oadUpdate.html',
url: 'lock-oadUpdate.html'
}]*/
});
mui.plusReady(function() {
var self = plus.webview.currentWebview();
nowFileType = self.fileType;
console.log("filepath:" + self.filepath);
init(self.filepath);
var sdRoot = getSDRoot();
/*var location = "Download";
init(sdRoot + "/" + location);*/
//点击事件
mui('.mui-table-view').on('tap', 'li', function() {
var name = this.getAttribute('name');
var fileType = this.getAttribute('data-type');
var filepath = subRoot + '/' + name;
console.log("文件路径-->" + filepath);
console.log("文件名称-->" + name);
if(fileType === 'Folder') {
mui.openWindow({
url: 'file-query.html',
id: 'file-query.html',
createNew: true,
extras: {
filepath: filepath,
fileType:nowFileType
}
})
} else {
//文件
if(name.indexOf(".bin") != -1) {
console.log("这是bin文件");
if(name.indexOf("_"+nowFileType) == -1){
mui.alert("请使用 "+nowFileType +" 类型文件进行升级操作");
return;
}
if(!lockOadWebview) {
lockOadWebview = plus.webview.getWebviewById("lock-oadUpdate.html");
}
mui.fire(lockOadWebview, "oadInfa", {
fileName: name,
filePath: filepath
})
//跳转不了
/*mui.openWindow({
url: 'lock-oadUpdate.html',
id: 'lock-oadUpdate.html'
});*/
mui.back();
}
}
})
})
function init(filePath) {
// 获得sd卡根目录
document.querySelector('.mui-title').innerHTML = filePath;
var File = plus.android.importClass("java.io.File");
subRoot = new File(filePath);
// 遍历sd卡根目录下的所有文件和文件夹
var files = plus.android.invoke(subRoot, "listFiles");
var len = files.length;
var list = document.getElementById("list");
var fragmentFolder = document.createDocumentFragment();
var fragmentFile = document.createDocumentFragment();
var li;
for(var i = 0; i < len; i++) {
var file = files[i];
// 过滤隐藏文件
if(!plus.android.invoke(file, "isHidden")) {
var name = plus.android.invoke(file, "getName");
li = document.createElement('li');
li.className = 'mui-table-view-cell mui-media';
li.setAttribute('name', name);
// 判断是文件还是文件夹
if(plus.android.invoke(file, "isDirectory")) {
// 设置标志为文件夹,供后面使用
li.setAttribute('data-type', 'Folder');
// 读取文件夹下子文件夹及子文件数目
var obj = readSonFilenum(file);
li.innerHTML = '<a class="mui-navigate-right">' +
'<img class="mui-media-object mui-pull-left" src="../img/folder.png">' +
'<div class="mui-media-body">' + name +
'<p class="mui-ellipsis">文件夹数量:' + obj.subFolderNum + ' 文件数量:' + obj.subFileNum + '</p></div></a>';
fragmentFolder.appendChild(li);
} else {
li.setAttribute('data-type', 'File');
// 读文件大小
var fileSizeString = readFileSize(file);
li.innerHTML = '<a class="mui-navigate-right">' +
'<img class="mui-media-object mui-pull-left" src="../img/file.png">' +
'<div class="mui-media-body mui-ellipsis">' + name +
'<p class="mui-ellipsis">' + fileSizeString + '</p></div></a>';
fragmentFile.appendChild(li);
}
};
}
list.appendChild(fragmentFolder);
list.appendChild(fragmentFile);
}
</script>
</body>
</html>
其中njs-io.js文件如下所示
/**
* 获得sd卡根目录
*/
function getSDRoot(){
// 导入android.os.Environment类对象
var environment = plus.android.importClass("android.os.Environment");
// 判断SD卡是否插入
if(environment.getExternalStorageState() !== environment.MEDIA_MOUNTED){
plus.nativeUI.toast('没有找到SD卡');
return;
}
console.log("获取 Android 数据目录:"+environment.getDataDirectory());
console.log("获取 Android 下载/缓存内容目录:"+environment.getDownloadCacheDirectory());
console.log("获取外部存储目录即 SDCard:"+environment.getExternalStorageDirectory());
console.log("获取外部存储设备的当前状态:"+environment.getExternalStorageState());
//console.log("获取 Android 的根目录:"+getRootDirectory());
return environment.getExternalStorageDirectory();
}
/**
* 创建文件夹
* @param {Object} path
*/
function creatFolder(path){
var File = plus.android.importClass("java.io.File");
var fd = new File(path);
if(!fd.exists()){
fd.mkdirs();
plus.nativeUI.toast("创建成功");
}
}
/**
* 删除文件(文件夹)
* @param {Object} path
*/
function deleteFile(path){
var File = plus.android.importClass("java.io.File");
var fd = new File(path);
if (fd != null && fd.exists()){
fd.delete();
plus.nativeUI.toast("删除成功");
}
}
/**
* 读文件大小
* @param {Object} file
*/
function readFileSize(file){
var FileInputStream = plus.android.importClass("java.io.FileInputStream");
var fileSize = new FileInputStream(file);
var size = fileSize.available();
var fileSizeString;
if(size == 0){
fileSizeString = "0B";
}else if(size < 1024){
fileSizeString = size + "B";
}else if(size < 1048576){
fileSizeString = (size/1024).toFixed(2) + "KB";
}else if (size < 1073741824){
fileSizeString = (size/1048576).toFixed(2) + "MB";
}else{
fileSizeString = (size/1073741824).toFixed(2) + "GB";
}
return fileSizeString;
}
/**
* 读取文件夹下子文件夹及子文件数目
* @param {Object} file
*/
function readSonFilenum(file){
var subFile = plus.android.invoke(file,"listFiles");
var subLen = subFile.length;
var obj = {
subFolderNum: 0,
subFileNum: 0
};
for(var k=0;k<subLen;k++){
if(!plus.android.invoke(subFile[k],"isHidden")){
if(plus.android.invoke(subFile[k],"isDirectory")){
obj.subFolderNum++;
}else{
obj.subFileNum++;
}
}
}
return obj;
}