MUI-APP开发之mui框架封装获取文件方式

<!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;
}

猜你喜欢

转载自blog.csdn.net/qq_38322527/article/details/80902566
MUI
今日推荐