本文档部分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)
参数名称描述
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)
参数名称描述
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)
参数名称描述
opCode操作ID
cbGetFileSize(opId,dataType,data)
参数名称描述
opId操作ID
dataType返回数据的数据类型为uex.cText(值为0)
data返回的文件大小,单位为byte
getFilePath(opCode)
参数名称描述
opCode操作ID
cbGetFilePath(opId,dataType,data)
参数名称描述
opId操作ID
dataType返回数据的数据类型为uex.cText(值为0)
data返回文件路径
getFileRealPath(inPath)
参数名称描述
inPath输入的文件相对路径
cbGetFileRealPath(opId,dataType,data)
参数名称描述
opId操作ID
dataType返回数据的数据类型为uex.cText(值为0)
data返回文件绝对路径
closeFile(opCode)
参数名称描述
opCode操作ID
getReaderOffset(opCode)
参数名称描述
opCode操作id
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)
参数名称描述
opCode操作id
inPos字节数
seekBeginOfFile(opCode)
参数名称描述
opCode操作id
seekEndOfFile(opCode)

参数名称描述
opCode操作id


// 本代码由寒暄提供,如有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>