概览
此文解释如何在泰泽设备上读写文件。泰泽提供一个简单文件接口,Filesystem API,来创建,读取,写入和删除文件。
目录
配置
创建文件
写入文件
读取文件
删除文件
--------
在配置文件中定义特性
为了访问文件系统,你需要在config.xml中添加必要的权限。它声明允许特征使用泰泽SDK。打开config.xml文件,选择Feature并且点击http://tizen.org/api/filesystem选项。
另外你也可以手动添加下面行到config.xml文件。
http://tizen.org/api/filesystem:特权访问设备文件系统
创建文件
你可以使用泰泽 FileSystemManagerObject 对象去访问文件系统API函数。你可以通过tizen.filesystem来访问
FileSystemManagerObject。
决定目录
为了创建一个文件或在文件系统中执行一些操作,你需要使用using.tizen.filesystem.resolve()决定一个目录并且获得一个代表目录的对象。
var documentsDir;
function onResolveSuccess(dir) {
documentsDir = dir;
}
function onResolveError(e) {
console.log('message: ' + e.message);
}
tizen.filesystem.resolve('documents', onResolveSuccess, onResolveError, 'rw');
创建文件
你可以使用对象代表目录创建一个文件。函数createFile()使用文件名作为参数。
documentsDir.createFile('sample-text-file.txt');
写入文件
为了获得访问文件的权限,你需要通过代表目录对象的resolve()方法解决。如果文件存在,你将得到一个文件处理对象。你需要打开文件在上面做读写操作。你可以使用openStream()方法来打开文件,如果成功返回FileStream对象。对于打开的文件FileStream扮演一个处理对象。
openStream()函数接受4个参数。
void openStream(FileMode mode, FileStreamSuccessCallback onsuccess, optional ErrorCallback? onerror, optional DOMString? encOding);
mode - 被访问的文件模式
success callback - 如果打开成功返回 FileStream object
error callback - 打开失败调用 (optional)
encoding - 文件编码(optional)
Mode | Usage | "r" | Reading | "a" | Appending | "rw" | Writing |
try {
file
= documentsDir.resolve('sample-text-file.txt');} catch (exc) {
console
.log('Could not resolve file: ' + exc.message);
// Stop in case of any errorsreturn;}
try {
file
.openStream(// open for appending'a',
// success callback - add textarea's contents
writeToStream
,
// error callback
onError
);} catch (exc) {
console
.log('Could not write to file: ' + exc.message);}
成功调用openStream()方法你可以得到FileStream对象。你可以使用以输入的文本为参数的write()方法写入文件。在write()函数调用完后关闭流。
function writeToStream(fileStream) {try {
fileStream
.write('This is my first sentence to write.');
fileStream
.close();} catch (exc) {
console
.log('Could not write to file: ' + exc.message);}
读取文件
你有两种方式读取文件。一条路径是决定一个文件,获得关联到文件的流从流中读取。这种方式和上面解释的write()方法类似。
你可以通过文件对象的fileSize属性得到当前文件的大小。
try{
file = documentsDir.resolve('sample-text-file.txt');
}catch(exc){
console.log('Could not resolve file:' + exc.message);
//Stop in case of any errors
return;
}
try{
file.openStream(
//open for reading
'r',
//success callback - add textarea's contents
readFromStream,
//error callback
onError
);
}catch(exc){
console.log('Could not write to file:' + exc.message);
}
打开文件后,流的起始位置在文件的开头。这个位置指示下一次读取操在那个字节。使用流的position属性设置位置。在文件里读取n个字节会导致位置移动n个字节。bytesAvailable 属性表明在到文件末尾还有多少字节可读。
你可以设置position属性跳过读过的字节,然后调用read()函数读取剩下的字节。
function readFromStream(fileStream) {try {
fileStream
.position = 10;var contents = fileStream.read(fileStream.bytesAvailable);
fileStream
.close();
console
.log('file contents after pos 10:' + contents);} catch (exc) {
console
.log('Could not read from file: ' + exc.message);}
第二种方式是使用文件对象的readAsText()方法。通过这种方式你不需要打开文件流,readAsText()方法成功调用会返回文件的内容作为字符串。
function displayFileContentsText() {var file;try {
file
= documentsDir.resolve('sample-text-file.txt');
console
.log('File size: ' + file.fileSize);} catch (exc) {
console
.log('Could not resolve file: ' + exc.message);
// Stop in case of any errorsreturn;}
try {
file
.readAsText(// success callback - display the contents of the filefunction(contents) {
console
.log('File contents:' + contents);},
// error callback
onError
);} catch (exc) {
console
.log('readAsText() exception:' + exc.message +
'
'
);}}
删除文件
你可以使用deleteFile()方法删除文件,此方法携带一个包含路径的文件名做参数。
function deleteSampleFile(){
try{
documentsDir.deleteFile(documentsDir.fullPath + '/sample-text-file.txt');
}catch(exc){
console.log('deleteSampleFile():' + exc.message);
}
|