在使用uniapp进行ios和android开发时,有可能需要对文件进行操作,比如:创建文件夹和文件,删除文件等。这些操作必须调用相关的API才行,并且这些API是都异步操作的,在我们的业务中,有时又必须同步处理才行,所以我将所有的操作进行了同步化的处理,将代码抽到一个名为的文件中,通过ES6的方式导出方法,然后在vue文件中直接导入使用即可。代码如下,代码分为同步和异步两部分,各自根据需要使用即可:
// -------------------------------------默认的异步操作------------------------------
export function getDirectory(directoryName,successCB){
(
.PRIVATE_DOC,
function( fs ) {
//directoryName:可以是一个文件名,如果是路径,则路径上的所有文件夹都会自动创建
(directoryName, {create:true},successCB, function(){} );
("创建完成.............")
},
function ( e ) {}
);
}
export function getFile(filePath,successCB){
(
.PRIVATE_DOC,
function( fs ) {
//directoryName:可以是一个文件名,如果是路径,则路径上的所有文件夹都会自动创建
(filePath, {create:true},successCB, function(){} );
("创建完成.............")
},
function ( e ) {}
);
}
export function moveFile(srcFilePath,srcFileName,dstFilePath,dstFileName,successCB){
( "_documents/b1/", function( entry ){
("_doc/", function(root){
/* (
root,
"",
function( entry ){
("New Path: " + );
},
function( e ){
( "错1误"+(e) );
}
); */
(
root,
"",
function( entry ){
("New Path: " + );
},
function( e ){
( "错1误"+(e) );
}
);
})
})
}
export function copyFile(srcFilePath,srcFileName,dstFilePath,dstFileName,successCB){
( "_documents/b1/", function( entry ){
("_doc/", function(root){
(
root,
"",
function( entry ){
("New Path: " + );
},
function( e ){
( "错1误"+(e) );
}
);
})
})
}
/**
* 传入目录dirEntry,如果传了fileName,则删除对应文件,否则目录下所有文件全部删除
* @param {Object} dirEntry
* @param {Object} fileName
*/
export function removeFile(dirEntry, fileName) {
(.PRIVATE_DOC, function(fs) {
let entry = dirEntry || ;
let directoryReader = ();
(function(entries) {
for (let i = - 1; i >= 0; i--) {
if (fileName) {
if (fileName === entries[i].name) {
("删除文件", entries[i].name);
entries[i].remove();
}
} else {
entries[i].remove();
}
}
});
});
}
// ----------------------------------------------------------------同步化-操作-----------------------------------------
/**
* 同步化获取文件,文件不存在会自动创建
* @param {Object} fileName 可以是文件名,也可以是/路径/文件名
* @param {Object} dirEntry
* @return 文件Entry
*/
export async function getFileEntryAsync(fileName,dirEntry){
("[getFileEntryAsync]开始执行")
return new Promise((resolve) => {
(
.PRIVATE_DOC,
function(fs) {
("[getFileEntryAsync]fileName is :" + fileName)
let entry = dirEntry || ;
(
fileName, {create: true},
function(fileEntry) {
("[getFileEntryAsync] 执行完成")
resolve(fileEntry);
},function(ex){(ex)}
);
}
);
})
}
/**
* 获取文件夹,不存在会自动创建
* @param {Object} dirName
*/
export async function getDirEntryAsync(dirName) {
return new Promise(async (resolve) => {
(.PRIVATE_DOC, function(fs) {
(dirName, {
create: true
}, function(dirEntry) {
resolve(dirEntry);
})
})
})
}
/**
* 获取通过fileEntry获取file,不存在会自动创建
* @param {Object} fileName
* @param {Object} dirEntry
*/
export async function getFileAsync(fileName, dirEntry) {
("[getFileAsync]")
return new Promise(async (resolve) => {
let fileEntry = await getFileEntryAsync(fileName, dirEntry);
(function(file) {
resolve(file);
});
})
}
/**
* 读取文件中的内容
* @param {Object} path
* @param {Object} dirEntry
*/
export async function getFileContextAsync(path, dirEntry) {
let deffered;
let fileReader = new ();
= function(evt) {
deffered();
}
let file = await getFileAsync(path, dirEntry);
(file, 'utf-8');
return new Promise((resolve) => {
deffered = resolve;
});
}
/**
* 向文件中写入数据
* @param {Object} path 要写入数据的文件的位置
* @param {Object} fileContext 要写入的内容
* @param {Object} dirEntry 文件夹,可不写使用默认
*/
export async function writeContextToFileAsync(path,fileContext, dirEntry) {
let fileEntry =await getFileEntryAsync(path);
let file =await getFileAsync(path);
return new Promise((resolve) => {
( async writer => {
// 写入文件成功完成的回调函数
= e => {
("写入数据成功");
resolve()
};
// 写入数据
((fileContext));
})
});
}
/**
* 判断文件是否存在
* @param {Object} fileName
* @param {Object} dirEntry
*/
export async function existFileAsync(fileName, dirEntry){
return new Promise((resolve)=>{
(.PRIVATE_DOC, function(fs) {
let entry = dirEntry || ;
let directoryReader = ();
(function(entries) {
let isExist = (entry => === fileName);
resolve(isExist);
});
});
})
}
/**
* 遍历dirEntry,深层次的目录暂不考虑
* @param {Object} dirEntry
*/
export async function iterateDierctory(dirEntry) {
return new Promise((resolve) => {
(.PRIVATE_DOC, function(fs) {
let entry = dirEntry || ;
let directoryReader = ();
(function(entries) {
((item, idx, arr)=>{
if(idx===0) ("---------------"++"目录-----------------");
(idx+1, );
if(idx===-1) ("---------------end-----------------");
})
resolve(entries);
}, function(e) {
("Read entries failed: " + );
});
});
})
}
/* 调用例子
this.DIR_NAME = 'test'
fileName = ''
filePath = '_doc/test/'
let dirEntry = await (this.DIR_NAME); //创建、获取文件夹
let fileEntry = await (fileName, dirEntry); // 创建、获取文件
let {result:content} = await (filePath); // 获取文件的内容
let trajectory = (content||"[]");
({lat, lng});
(function(writer){
(0);
((trajectory));
}); */
有了同步化的方法后,在vue问价中写业务时就不需要使用回调方法或者then了。