本文档部分API缺少示例代码,诚挚的邀请你参与到示例代码的编写中来,你可以在代码中发布2行自定义注释,内容自拟。 有意者可与刺鸟联系(QQ:4041990 Q群:7702175)
API简介
uexFileMgr对象封装了文件系统管理的接口,用于管理选择文件,读写文件,读取文本文件等。
每个Widget都有一个沙箱,沙箱内的文件及文件夹都是由系统创建,Appcan平台实现了一次开发,跨平台运行的机制,由于不同系统各自的文件管理方式不一样。因此,appcan平台封装了沙盒路径,供上层JS调用。
但是,对于诸如调用照相机拍摄照片后的路径,返回的却是绝对路径,即由平台自动返回的路径都为绝对路径。
接口说明
方法 | 说明 |
uexFileMgr.createFile(opCode,inPath) | 创建一个文件,如果碰到文件目录不存在的情况,系统会自动创建文件目录。 |
uexFileMgr.cbCreateFile(opId,dataType,data) | uexFileMgr.createFile的回调方法。 |
uexFileMgr.createDir(opCode,inDirPath) | 创建一个文件目录。 |
uexFileMgr.cbCreateDir(opId,dataType,data) | uexFileMgr.createDir的回调方法。 |
uexFileMgr.openFile(opCode,inPath,inMode) | 打开一个文件。 |
uexFileMgr.cbOpenFile(opId,dataType,data) | uexFileMgr.openFile的回调方法。 |
uexFileMgr.deleteFileByPath(inPath) | 根据文件路径删除文件。 |
uexFileMgr.cbDeleteFileByPath(opId,dataType,data) | uexFileMgr.deleteFileByPath的回调方法。 |
uexFileMgr.deleteFileByID(opCode) | 根据id删除文件,在创件文件的时候会传入id,在同一html页面中可根据此id进行删除。 |
uexFileMgr.cbDeleteFileByID(opId,dataType,data) | uexFileMgr.deleteFileByID的回调方法。 |
uexFileMgr.getFileTypeByPath(inPath) | 根据文件路径判断是否是文件还是文件夹。 |
uexFileMgr.cbGetFileTypeByPath(opId,dataType,data) | uexFileMgr.getFileTypeByPath的回调方法。 |
uexFileMgr.getFileTypeByID(opCode) | 根据id判断是否是文件还是文件夹,在创件文件的时候会传入id。 |
uexFileMgr.cbGetFileTypeById(opId,dataType,data) | uexFileMgr.getFileTypeByID的回调方法。 |
uexFileMgr.isFileExistByPath(inOpCode,inPath) | 根据文件路径判断文件是否存在【注、为了兼容之前版本,inOpCode可不填,当参数为一个时,默认为文件路径,当参数为两个时,第一个为操作id,第二个为文件路径】。 |
uexFileMgr.cbIsFileExistByPath(opId,dataType,data) | uexFileMgr.isFileExistByPath的回调方法。 |
uexFileMgr.isFileExistByID(opCode) | 根据id判断文件是否存在,在创件文件的时候会传入id。 |
uexFileMgr.cbIsFileExistById(opId,dataType,data) | uexFileMgr.isFileExistByID的回调方法。 |
uexFileMgr.explorer(inPath) | 开启文件浏览器。 |
uexFileMgr.cbExplorer(opId,dataType,data) | uexFileMgr.explorer的回调方法。 |
uexFileMgr.multiExplorer(inPath) | 浏览文件管理器,可以选择多个文件。 |
uexFileMgr.cbMultiExplorer(opId,dataType,data) | uexFileMgr.multiExplorer的回调方法。 |
uexFileMgr.writeFile(opCode,inMode,inData) | 向文件里写数据。 |
uexFileMgr.readFile(opCode,inLen) | 根据opCode读取文件数据。 |
uexFileMgr.cbReadFile(opId,dataType,data) | uexFileMgr.readFile的回调方法。 |
uexFileMgr.getFileSize(opCode) | 根据opCode读取文件内容大小,单位是byte。 |
uexFileMgr.cbGetFileSize(opId,dataType,data) | uexFileMgr.getFileSize的回调方法。 |
uexFileMgr.getFilePath(opCode) | 根据opCode读取文件路径。 |
uexFileMgr.cbGetFilePath(opId,dataType,data) | uexFileMgr.getFilePath的回调方法。 |
uexFileMgr.getFileRealPath(inPath) | 根据输入的文件【相对路径】,获取绝对路径。 |
uexFileMgr.cbGetFileRealPath(opId,dataType,data) | uexFileMgr.getFileRealPath的回调方法。 |
uexFileMgr.closeFile(opCode) | 根据opCode关闭文件对象。 |
uexFileMgr.getReaderOffset(opCode) | 根据opCode获取文件的阅读偏移量,此方法用于电子书阅读。 |
uexFileMgr.cbGetReaderOffset(opId,dataType,data) | uexFileMgr.getReaderOffset的回调方法。 |
uexFileMgr.readPercent(opCode,inPercent,inLen) | 根据opCode读取文件,从指定偏移值开始读取的指定的百分比,此方法用于电子书阅读。 |
uexFileMgr.cbReadPercent(opId,dataType,data) | uexFileMgr.readPercent的回调方法。 |
uexFileMgr.readNext(opCode,inLen) | 根据opCode按指定的大小向下读一页,此方法用于电子书阅读。 |
uexFileMgr.cbReadNext(opId,dataType,data) | uexFileMgr.readNext的回调方法。 |
uexFileMgr.readPre(opCode,inLen) | 根据opCode按指定的大小向上读一页,此方法用于电子书阅读。 |
uexFileMgr.cbReadPre(opId,dataType,data) | uexFileMgr.readPre的回调方法。 |
uexFileMgr.seekFile(opCode,inPos) | 设置文件偏移值。 |
uexFileMgr.seekBeginOfFile(opCode) | 把指针重新指向第一位。 |
uexFileMgr.seekEndOfFile(opCode) | 设置文件偏移值为文件结束。 |
createFile(opCode,inPath) ▲
参数名称 | 描述 |
opCode | 操作ID |
inPath | 创建的文件路径 |
cbCreateFile(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,成功为0,或失败为1 |
createDir(opCode,inDirPath) ▲
参数名称 | 描述 |
opCode | 操作ID |
inDirPath | 创建的目录路径 |
cbCreateDir(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,成功为0,或失败为1 |
openFile(opCode,inPath,inMode) ▲
参数名称 | 描述 |
opCode | 操作ID |
inPath | 创建的目录路径,wgt://协议打头。表示定位到当前应用的沙盒目录 |
inMode | 打开方式 inMode值说明1只读方式打开2可写方式打开3新建方式打开4电子书方式打开 |
cbOpenFile(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,成功为0,或失败为1 |
deleteFileByPath(inPath) ▲
cbDeleteFileByPath(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,成功为0,或失败为1 |
deleteFileByID(opCode) ▲
参数名称 | 描述 |
opCode | 创建文件时传入的id,只在同一html页面中有效 |
cbDeleteFileByID(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,成功为0,或失败为1 |
getFileTypeByPath(inPath) ▲
cbGetFileTypeByPath(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,uex.cFile(值为0)是文件,uex.cFolder(值为1)是文件夹 |
getFileTypeByID(opCode) ▲
参数名称 | 描述 |
opCode | 创建文件时传入的id,只在同一html页面中有效 |
cbGetFileTypeById(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,uex.cFile(值为0)是文件,uex.cFolder(值为1)是文件夹 |
isFileExistByPath(inOpCode,inPath) ▲
参数名称 | 描述 |
inOpCode | 操作ID |
inPath | 文件路径 |
cbIsFileExistByPath(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,uex.cTrue (值为1)表示存在,uex.cFalse(值为0)表示不存在 |
isFileExistByID(opCode) ▲
参数名称 | 描述 |
opCode | 创建文件时传入的id,只在同一html页面中有效 |
cbIsFileExistById(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的int型的数据,uex.cTrue(值为1)表示存在,uex.cFalse(值为0)表示不存在 |
explorer(inPath) ▲
参数名称 | 描述 |
inPath | 文件路径(只在Android版本中支持定位到某一目录下,比如'sdcard/')。在为空的情况下,将打开默认目录,Android上默认打开sdcard根目录,iphone上默认打开document文件目录 |
cbExplorer(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cText(值为0) |
data | 返回文件管理器里选择的文件在sdcard上的路径 |
multiExplorer(inPath) ▲
参数名称 | 描述 |
inPath | 文件路径(只在Android版本中支持定位到某一目录下,比如'sdcard/')。在为空的情况下,将打开默认目录,Android上默认打开sdcard根目录,iphone上默认打开document文件目录 |
cbMultiExplorer(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cJSON(值为1) |
data | 返回文件管理器里选择的文件路径,格式如下:{'2':'/sdcard/DCIM/IMG_0003.JPG','1':'/sdcard/DCIM/1337569458885.png','0':'/sdcard/Apks/com.aurorasoftworks4.apk'} |
writeFile(opCode,inMode,inData) ▲
参数名称 | 描述 |
opCode | 操作ID |
inMode | 写文件的模式, 0为直接写内容,会把之前的内容覆盖;1为追加到文件里 |
inData | 写的数据内容 |
readFile(opCode,inLen) ▲
参数名称 | 描述 |
opCode | 操作ID |
inLen | 读取文件的大小,-1表示全部读取 |
cbReadFile(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cText(值为0) |
data | 返回的String型的文件内容 |
getFileSize(opCode) ▲
cbGetFileSize(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cText(值为0) |
data | 返回的文件大小,单位为byte |
getFilePath(opCode) ▲
cbGetFilePath(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cText(值为0) |
data | 返回文件路径 |
getFileRealPath(inPath) ▲
cbGetFileRealPath(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cText(值为0) |
data | 返回文件绝对路径 |
closeFile(opCode) ▲
getReaderOffset(opCode) ▲
cbGetReaderOffset(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cInt(值为2) |
data | 返回的文件的偏移量,单位byte |
readPercent(opCode,inPercent,inLen) ▲
参数名称 | 描述 |
opCode | 操作id |
inPercent | 读取百分比,其值为从0~100之间的整数 |
inLen | 指定偏移值,单位byte |
cbReadPercent(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cText(值为0) |
data | 返回的String型的文件内容 |
readNext(opCode,inLen) ▲
参数名称 | 描述 |
opCode | 操作id |
inLen | 读取的长度 |
cbReadNext(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cText(值为0) |
data | 返回的String型的文件内容 |
readPre(opCode,inLen) ▲
参数名称 | 描述 |
opCode | 操作id |
inLen | 读取的长度 |
cbReadPre(opId,dataType,data) ▲
参数名称 | 描述 |
opId | 操作ID |
dataType | 返回数据的数据类型为uex.cText(值为0) |
data | 返回的String型的文件内容 |
seekFile(opCode,inPos) ▲
seekBeginOfFile(opCode) ▲
seekEndOfFile(opCode) ▲
// 本代码由寒暄提供,如有bug请和寒暄联系(QQ:457696322 Q群:7702175)
<!DOCTYPE html>
<html>
<head>
<title>AppCan API uexFileMgr</title>
<meta charset='utf-8'>
<script>
window.uexOnload = function(type){
if(!type){
uexWidgetOne.onError=function(opCode,errorCode,errorDesc){
console.log(errorCode+':'+errorDesc);
}
}
}
function $$(id){
return document.getElementById(id);
}
var opId = parseInt(Math.random()*10000);
var path = 'wgt://data/test.txt';
var pathDir = 'wgt://data/test';
function createFile(){
uexFileMgr.cbCreateFile=function(opId,dataType,data){
var str = '创建失败';
if(dataType==2 && data==0) str='创建成功';
console.log(str);
}
uexFileMgr.createFile(opId, path);
uexFileMgr.closeFile(opId);
opId++;
}
function createDir(){
uexFileMgr.cbCreateDir=function(opId,dataType,data){
var str = '创建失败';
if(dataType==2 && data==0) str='创建成功';
console.log(str);
}
uexFileMgr.createDir(opId,pathDir);
uexFileMgr.closeFile(opId);
opId++;
}
function openFile(){
uexFileMgr.cbOpenFile=function(opId,dataType,data){
var str = '打开失败';
if(dataType==2 && data==0) str='打开成功';
console.log(str);
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.closeFile(opId);
opId++;
}
function deletFileByPath(){
uexFileMgr.cbDeleteFileByPath=function(opId,dataType,data){
var str = '删除失败';
if(dataType==2 && data==0) str='删除成功';
console.log(str);
}
uexFileMgr.deleteFileByPath(path);
uexFileMgr.closeFile(opId);
opId++;
}
function deletFileByID(){
uexFileMgr.cbDeleteFileByID=function(opId,dataType,data){
var str = '删除失败';
if(dataType==2 && data==0) str='删除成功';
console.log(str); }
uexFileMgr.openFile(opId,path,1);
uexFileMgr.deleteFileByID(opId);
uexFileMgr.closeFile(opId);
opId++;
}
function getFileTypeByPath(){
uexFileMgr.cbGetFileTypeByPath =function(opId,dataType,data){
if(dataType==2){
var type = '';
if(data==0) type = '类型为文件';
else if(data==1) type = '类型为文件夹';
console.log(type);
}
}
uexFileMgr.getFileTypeByPath(pathDir);
uexFileMgr.closeFile(opId);
opId++;
}
function getFileTypeByID(){
uexFileMgr.cbGetFileTypeById =function(opId,dataType,data){
if(dataType==2){
var type = '';
if(data==0) type = '类型为文件';
else if(data==1) type = '类型为文件夹';
console.log(type);
}
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.getFileTypeByID(opId);
uexFileMgr.closeFile(opId);
opId++;
}
function isFileExistByPath(){
uexFileMgr.cbIsFileExistByPath=function(opId,dataType,data){
if(dataType==2){
var type = '';
if(data==0) type = '文件不存在';
else if(data==1) type = '文件存在';
console.log(type);
}
}
uexFileMgr.isFileExistByPath(path);
uexFileMgr.closeFile(opId);
opId++;
}
function isFileExistByID(){
uexFileMgr.cbIsFileExistById=function(opId,dataType,data){
if(dataType==2){
var type = '';
if(data==0) type = '文件不存在';
else if(data==1) type = '文件存在';
console.log(type);
}
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.isFileExistByID(opId);
uexFileMgr.closeFile(opId);
opId++;
}
function explorer(){
uexFileMgr.cbExplorer=function(opId,dataType,data){
if(dataType==0){
console.log('文件路径:'+data);
}
}
var path = '/sdcard';//android的用法
uexFileMgr.explorer('');
}
function multiExplorer(){
uexFileMgr.cbMultiExplorer=function(opId,dataType,data){
if(dataType==1){
console.log('文件路径:'+data);
}
}
var path = '/sdcard';//android的用法
uexFileMgr.multiExplorer('');
}
function writeFile(){
var content = $$('write').value;
var inMode = 1; //0为直接写内容,会把之前的内容覆盖;1为追加到文件里
uexFileMgr.openFile(opId,path,1);
uexFileMgr.writeFile(opId,inMode,content);
uexFileMgr.closeFile(opId);
opId++;
}
/*所读的文件编码为utf-8才能读出来数据,其它编码方式可能读出来为null*/
function readFile(){
uexFileMgr.cbReadFile = function (opId,dataType, data){
if(dataType==0){
console.log('文件内容:'+data);
}
}
var inLen = -1; //-1表示全部读取
uexFileMgr.openFile(opId,path,1);
uexFileMgr.readFile(opId,inLen);
uexFileMgr.closeFile(opId);
opId++;
}
/*txt文件已由uexFileMgr.createFile创建*/
function getFileSize(){
uexFileMgr.cbGetFileSize = function (opId,dataType, data){
if(dataType==2){
console.log('文件大小:'+data+'byte');
}
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.getFileSize(opId);
uexFileMgr.closeFile(opId);
opId++;
}
/*txt文件已由uexFileMgr.createFile创建*/
function getFilePath(){
uexFileMgr.cbGetFilePath = function (opId,dataType, data){
if(dataType==0){
console.log('文件路径:'+data);
}
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.getFilePath(opId);
uexFileMgr.closeFile(opId);
opId++;
}
/*txt文件已由uexFileMgr.createFile创建*/
function getFileRealPath(){
uexFileMgr.cbGetFileRealPath = function (opId,dataType, data){
if(dataType==0){
console.log('文件路径:'+data);
}
}
uexFileMgr.getFileRealPath(path);
uexFileMgr.closeFile(opId);
opId++;
}
/*txt文件已由uexFileMgr.createFile创建*/
function getReaderOffset(){
uexFileMgr.cbGetReaderOffset = function (opId,dataType, data){
if(dataType==2){
console.log('文件阅读偏移量:'+data);
}
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.getReaderOffset(opId);
uexFileMgr.closeFile(opId);
opId++;
}
/*txt文件已由uexFileMgr.createFile创建*/
function readPercent(){
uexFileMgr.cbReadPercent = function (opId,dataType, data){
if(dataType==0){
console.log('获取指定百分比:'+data);
}
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.readPercent(opId, 20, 10);
uexFileMgr.closeFile(opId);
opId++;
}
/*txt文件已由uexFileMgr.createFile创建*/
function readNext(){
uexFileMgr.cbReadNext = function (opId,dataType, data){
if(dataType==0){
console.log('下一页文件内容:'+data);
}
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.readNext(opId, 20);
uexFileMgr.closeFile(opId);
opId++;
}
/*txt文件已由uexFileMgr.createFile创建*/
function readPre(){
uexFileMgr.cbReadPre = function (opId,dataType, data){
if(dataType==0){
console.log('上一页文件内容:'+data);
}
}
uexFileMgr.openFile(opId,path,1);
uexFileMgr.readPre(opId,20);
uexFileMgr.closeFile(opId);
opId++;
}
/*txt文件已由uexFileMgr.createFile创建*/
function seekFile(){
uexFileMgr.openFile(opId,path,1);
uexFileMgr.seekFile(opId,20);
uexFileMgr.closeFile(opId);
opId++;
console.log('设置成功');
}
/*txt文件已由uexFileMgr.createFile创建*/
function seekBeginOfFile(){
uexFileMgr.openFile(opId,path,1);
uexFileMgr.seekBeginOfFile(opId);
uexFileMgr.closeFile(opId);
opId++;
console.log('设置成功');
}
/*txt文件已由uexFileMgr.createFile创建*/
function seekEndOfFile(){
uexFileMgr.openFile(opId,path,1);
uexFileMgr.seekEndOfFile(opId);
uexFileMgr.closeFile(opId);
opId++;
console.log('设置成功');
}
</script>
</head>
<body>
<div>
<input type='button' value='创建文件' onclick='createFile()'/>
<input type='button' value='创建目录' onclick='createDir()'/>
<input type='button' value='打开文件' onclick='openFile()'/>
<input type='button' value='删除文件ByPath' onclick='deletFileByPath()'/>
<input type='button' value='删除文件ById' onclick='deletFileByID()'/>
<input type='button' value='判断文件类型ByPath' onclick='getFileTypeByPath()'/>
<input type='button' value='判断文件类型ById' onclick='getFileTypeByID()'/>
<input type='button' value='判断文件是否存在ByPath' onclick='isFileExistByPath()'/>
<input type='button' value='判断文件是否存在ById' onclick='isFileExistByID()'/>
<input type='button' value='打开文件浏览器1' onclick='explorer()'/>
<input type='button' value='打开文件浏览器2' onclick='multiExplorer()'/>
<br>
<input type='text' id='write' value='hello'>
<input type='button' value='写文件' onclick='writeFile()'/>
<br>
<input type='button' value='读文件' onclick='readFile()'/>
<input type='button' value='读取文件大小' onclick='getFileSize()'/>
<input type='button' value='获取文件路径' onclick='getFilePath()'/>
<input type='button' value='获取文件绝对路径' onclick='getFileRealPath()'/>
<input type='button' value='获取文件阅读偏移量' onclick='getReaderOffset()'/>
<input type='button' value='获取指定百分比文件' onclick='readPercent()'/>
<input type='button' value='读取下一页文件内容' onclick='readNext()'/>
<input type='button' value='读取上一页文件内容' onclick='readPre()'/>
<input type='button' value='设置文件偏移值' onclick='seekFile()'/>
<input type='button' value='把指针重新指向第一位' onclick='seekBeginOfFile()'/>
<input type='button' value='设置文件偏移值为文件结束' onclick='seekEndOfFile()'/>
</div>
</body>
</html>