HTML5+規範:IO(管理本地檔案系統)
IO模組管理本地檔案系統,用於對檔案系統的目錄瀏覽、檔案的讀取、檔案的寫入等操作。通過plus.io可獲取檔案系統管理物件。
PRIVATE_WWW: 應用執行資源目錄常量
PRIVATE_DOC: 應用私有文件目錄常量
PUBLIC_DOCUMENTS: 程式公用文件目錄常量
PUBLIC_DOWNLOADS: 程式公用下載目錄常量
一、常量
1、PRIVATE_WWW
應用執行資源目錄常量:plus.io.PRIVATE_WWW;
說明:Number型別,本地檔案系統常量,Number型別,固定值1。應用執行資源目錄,僅本應用可訪問。為了確保應用資源的安全性,此目錄只可讀。
平臺支援
Android - ALL (支援): Android平臺應用資源是放到apk的assets目錄中,安裝到裝置後無法列舉,為了能夠正常列舉訪問此目錄,需要將應用設定為釋放資源模式(在manifest.json中將runmode值設定為liberate),這樣程式在第一次執行時將資源釋放到sdcard中。 通常在裝置上的目錄為“/sdcard/Android/data/%PACKAGENAME%/apps/%APPID%/www”,其中%PACKAGENAME%是程式的包名、%APPID%是應用的標識,如“/sdcard/Android/data/io.dcloud.HelloH5/apps/HelloH5/www
iOS - ALL (支援): iOS平臺應用資源是放到應用的沙盒目錄中,安裝到裝置後放到應用沙盒目錄的“/DCloud_Pandora.app/Pandora/apps/%APPID%/www”,如“/DCloud_Pandora.app/Pandora/apps/HBuilder/www”。 如將應用設定為釋放資源模式(在manifest.json中將runmode值設定為liberate),程式在第一次執行時將資源釋放到應用沙盒目錄下的Library中“/Library/Pandora/apps/%APPID%/www”,如“/Library/Pandora/apps/HBuilder/www”。
示例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>File Example</title> <script type="text/javascript"> // 擴充套件API載入完畢後呼叫onPlusReady回撥函式 document.addEventListener( "plusready", onPlusReady, false ); // 擴充套件API載入完畢,現在可以正常呼叫擴充套件API function onPlusReady() { plus.io.requestFileSystem( plus.io.PRIVATE_WWW, function( fs ) { // 可通過fs操作PRIVATE_WWW檔案系統 // ...... }, function ( e ) { alert( "Request file system failed: " + e.message ); } ); } </script> </head> <body> Local file system </body> </html>
2、PRIVATE_DOC
應用私有文件目錄常量:plus.io.PRIVATE_DOC;
說明:Number 型別,本地檔案系統常量,Number型別,固定值2。應用私有文件目錄,僅本應用可讀寫。
平臺支援
Android - ALL (支援): 通常在裝置上的目錄為“/sdcard/Android/data/%PACKAGENAME%/.%APPID%/apps/%APPID%/doc”,其中%PACKAGENAME%是程式的包名、%APPID%是應用的標識,如“/sdcard/Android/data/io.dcloud.HBuilder/.HBuilder/apps/HBuilder/doc”。
iOS - ALL (支援): 通常在裝置應用沙盒目錄下“/Library/Pandora/apps/%APPID%/doc”,其中%APPID%是應用的標識,,如“/Library/Pandora/apps/HBuilder/doc
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
plus.io.requestFileSystem( plus.io.PRIVATE_DOC, function( fs ) {
// 可通過fs操作PRIVATE_DOC檔案系統
// ......
}, function ( e ) {
alert( "Request file system failed: " + e.message );
} );
}
</script>
</head>
<body>
Local file system
</body>
</html>
3、PUBLIC_DOCUMENTS
程式公用文件目錄常量:plus.io.PUBLIC_DOCUMENTS;
說明:Number 型別,本地檔案系統常量,Number型別,固定值3。程式公用文件目錄,所有應用可讀寫。
平臺支援
Android - ALL (支援):通常在裝置上的目錄為“/sdcard/Android/data/%PACKAGENAME%/.%APPID%/documents”,其中%PACKAGENAME%是程式的包名、%APPID%是應用的標識,如“/sdcard/Android/data/io.dcloud.HBuilder/.HBuilder/documents”。
iOS - ALL (支援): 通常在裝置應用沙盒目錄下“/Library/Pandora/documents”。
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
plus.io.requestFileSystem( plus.io.PUBLIC_DOCUMENTS, function( fs ) {
// 可通過fs操作PUBLIC_DOCUMENTS檔案系統
// ......
}, function ( e ) {
alert( "Request file system failed: " + e.message );
} );
}
</script>
</head>
<body>
Local file system
</body>
</html>
4、PUBLIC_DOWNLOADS
程式公用下載目錄常量:plus.io.PUBLIC_DOWNLOADS;
說明:Number 型別,本地檔案系統常量,Number型別,固定值4。程式公用下載目錄,所有應用可讀寫。
平臺支援
Android - ALL (支援): 通常在裝置上的目錄為“/sdcard/Android/data/%PACKAGENAME%/.%APPID%/downloads”,其中%PACKAGENAME%是程式的包名、%APPID%是應用的標識,如“/sdcard/Android/data/io.dcloud.HBuilder/.HBuilder/downloads”。
iOS - ALL (支援): 通常在裝置應用沙盒目錄下“/Library/Pandora/downloads”。
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
plus.io.requestFileSystem( plus.io.PUBLIC_DOWNLOADS, function( fs ) {
// 可通過fs操作PUBLIC_DOWNLOADS檔案系統
// ......
}, function ( e ) {
alert( "Request file system failed: " + e.message );
} );
}
</script>
</head>
<body>
Local file system
</body>
</html>
二、方法
requestFileSystem: 請求本地檔案系統物件
resolveLocalFileSystemURL: 通過URL引數獲取目錄物件或檔案物件
convertLocalFileSystemURL: 將本地URL路徑轉換成平臺絕對路徑
convertAbsoluteFileSystem: 將平臺絕對路徑轉換成本地URL路徑
1、requestFileSystem
請求本地檔案系統物件:void plus.io.requestFileSystem( type, succesCB, errorCB )
說明:獲取指定的檔案系統,可通過type指定獲取檔案系統的型別。 獲取指定的檔案系統物件成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
(1)、type: ( Number ) 必選 本地檔案系統常量。可取plus.io下的常量,如plus.io.PRIVATE_DOC、plus.io.PUBLIC_DOCUMENTS等。
(2)、succesCB: ( FileSystemSuccessCallback ) 必選 請求檔案系統成功的回撥。
(3)、errorCB: ( FileErrorCallback ) 可選 請求檔案系統失敗的回撥
返回值:void : 無
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
plus.io.requestFileSystem( plus.io.PRIVATE_WWW, function( fs ) {
// 可通過fs進行檔案操作
alert( "Request file system success!" );
}, function ( e ) {
alert( "Request file system failed: " + e.message );
} );
}
</script>
</head>
<body>
Request file system
</body>
</html>
2、resolveLocalFileSystemURL
通過URL引數獲取目錄物件或檔案物件void plus.io.resolveLocalFileSystemURL( url, succesCB, errorCB );
說明:快速獲取指定的目錄或檔案操作物件,如通過URL值“_www/test.html”可直接獲取檔案操作物件。 url值可支援相對路徑URL、本地路徑URL、網路路徑URL(http://localhost:13131/開頭)。 獲取指定的檔案或目錄操作物件成功通過succesCB回撥返回,如果指定URL路徑或檔案不存在則失敗通過errorCB回撥返回。
引數:
(1)、url : ( DOMString ) 必選 要操作檔案或目錄的URL地址
(2)、succesCB: ( FileResolveSuccessCallback ) 必選 獲取操作檔案或目錄物件成功的回撥函式
(3)、errorCB: ( FileErrorCallback ) 可選 獲取操作檔案或目錄物件失敗的回撥函式
返回值:void : 無
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
plus.io.resolveLocalFileSystemURL( "_www/test.html", function( entry ) {
// 可通過entry物件操作test.html檔案
entry.file( function(file){
var fileReader = new plus.io.FileReader();
alert("getFile:" + JSON.stringify(file));
fileReader.readAsText(file, 'utf-8');
fileReader.onloadend = function(evt) {
alert("11" + evt);
alert("evt.target" + evt.target);
alert(evt.target.result);
}
alert(file.size + '--' + file.name);
} );
}, function ( e ) {
alert( "Resolve file URL failed: " + e.message );
} );
}
</script>
</head>
<body>
Request file system
</body>
</html>
3、convertLocalFileSystemURL
將本地URL路徑轉換成平臺絕對路徑:String plus.io.convertLocalFileSystemURL( url );
說明:絕對路徑符合各平臺檔案路徑格式,通常用於Native.JS呼叫系統原生檔案操作API,也可以在前面新增“file://”後在html頁面中直接使用。
引數:url: ( String ) 必選 要轉換的檔案或目錄URL地址,URL地址必須是合法的路徑,如果地址不合法則返回null。
返回值:String : 轉換後在平臺路徑,在不同平臺或者不同裝置返回的值可能存在差異,如輸入url為“_doc/a.png”: Android平臺轉換後的路徑為“/storage/sdcard0/Android/data/io.dcloud.HBuilder/.HBuilder/apps/HBuilder/doc/a.png”; 在iOS平臺轉換後的路徑為“/var/mobile/Containers/Data/Application/757966CF-345C-4348-B07F-EEF83CF9A369/Library/Pandora/apps/HBuilder/doc/a.png”。
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady(){
var url="_www/index.html";
var path=plus.io.convertLocalFileSystemURL(url);
alert(path);
}
</script>
</head>
<body>
convertLocalFileSystemURL
</body>
</html>
4、convertAbsoluteFileSystem
將平臺絕對路徑轉換成本地URL路徑:String plus.io.convertAbsoluteFileSystem( path );
說明:絕對路徑符合各平臺檔案路徑格式,轉換後變成RelativeURL型別格式。 功能與convertLocalFileSystemURL方法相反,將絕對路徑轉換成相對路徑。
引數:path: ( String ) 必選 要轉換的平臺絕對路徑,絕對路徑必須是合法的路徑,如果絕對路徑不合法則返回null。
返回值:DOMString : 轉換後本地URL路徑
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady(){
var url="_www/index.html";
var path=plus.io.convertLocalFileSystemURL(url);
var newurl = plus.io.convertAbsoluteFileSystem(path);
alert(newurl); // 顯示值為“_www/index.html”
}
</script>
</head>
<body>
convertAbsoluteFileSystem
</body>
</html>
三、物件
DirectoryEntry: 檔案系統中的目錄物件,用於管理特定的本地目錄
DirectoryReader: 讀取目錄資訊物件,用於獲取目錄中包含的檔案及子目錄
File: 檔案系統中的檔案資料物件,用於獲取檔案的資料
FileEntry: 檔案系統中的檔案物件,用於管理特定的本地檔案
FileReader: 檔案系統中的讀取檔案物件,用於獲取檔案的內容
FileWriter: 檔案系統中的寫檔案物件,用於寫入檔案內容
FileSystem: 檔案系統物件,用於管理特定本地檔案目錄
Flags: JSON物件,獲取檔案操作的引數
Metadata: JSON物件,儲存檔案或目錄的狀態資訊物件
FileEvent: 檔案或目錄操作事件物件
URLType: 檔案路徑型別
RelativeURL: 相對路徑URL
LocalURL: 本地路徑URL
RemoteURL: 網路路徑URL
1、DirectoryEntry
檔案系統中的目錄物件,用於管理特定的本地目錄
1.1、屬性
isFile: 操作物件的是否為檔案,DirectoryEntry物件固定其值為false
isDirectory: 操作物件是否為目錄,DirectoryEntry物件固定其值為true
name: 目錄操作物件的名稱,不包括路徑
fullPath: 目錄操作物件的完整路徑,檔案系統的絕對路徑
fileSystem: 檔案操作物件所屬的檔案系統物件,參考FileSystem
1.2、方法
(1)、getMetadata: 獲取目錄的屬性
entry.getMetadata( successCB, errorCB, recursive );
說明:用於獲取檔案或目錄的屬性資訊。 獲取屬性資訊成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( MetadataSuccessCallback ) 必選 獲取檔案或目錄屬性資訊成功的回撥。
errorCB: ( FileErrorCallback) 必選 獲取檔案或目錄屬性資訊失敗的回撥。 recursive: ( Boolean ) 必選 是否遞迴計算目錄資訊,true為遞迴計算獲取資訊,false不遞迴計算獲取,預設值為false。
返回值:void : 無。
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)。
示例:
// Request the metadata object for this entry
entry.getMetadata( function ( metadata ) {
plus.console.log("Last Modified: " + metadata.modificationTime);
}, function () {
alert( e.message );
} );
(2)、moveTo: 移動目錄
entry.moveTo( parent, newName, succesCB, errorCB );
說明:以下情況移動目錄將會導致失敗: 將父目錄移動到子目錄中; 要移動到的目標目錄無效; 要移動到的目標路徑被檔案佔用; 要移動到的目標目錄已經存在並且不為空。 移動目錄成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
parent: ( DirectoryEntry ) 必選 要移動到的目標目錄
newName: ( DOMString ) 可選 移動後的目錄名稱,預設為原始目錄名稱
succesCB: ( EntrySuccessCallback ) 可選 移動目錄成功的回撥函式,回撥函式中的引數儲存新的目錄物件。
errorCB: ( FileErrorCallback) 可選 移動目錄失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
function moveDirecty(srcEntry,dstEntry) {
var newName = document.getElementById('newName').value,
// move the directory to a new directory and rename it
srcEntry.moveTo( dstEntry, newName, function( entry ) {
plus.console.log("New Path: " + entry.fullPath);
}, function ( e ) {
alert( e.message );
} );
}
(3)、copyTo: 拷貝目錄
entry.copyTo( parent, newName, succesCB, errorCB );
說明:以下情況拷貝目錄將會導致失敗: 將父目錄拷貝到子目錄中; 要拷貝到的目標目錄無效; 要拷貝到的目標路徑被檔案佔用; 要拷貝到的目標目錄已經存在並且不為空。 拷貝目錄成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
parent: ( DirectoryEntry ) 必選 要拷貝到的目標目錄
newName: ( DOMString ) 可選 拷貝後的目錄名稱,預設為原始目錄名稱
succesCB: ( EntrySuccessCallback ) 可選 拷貝目錄成功的回撥函式
回撥函式中的引數儲存新的目錄物件。
errorCB: ( FileErrorCallback) 可選 拷貝目錄失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
function copyDirecty(srcEntry,dstEntry){
var newName = document.getElementById('newName').value,
// copy the directory to a new directory and rename it
srcEntry.copyTo( dstEntry, newName, function( entry ){
plus.console.log("New Path: " + entry.fullPath);
}, function( e ){
alert( e.message );
} );
}
(4)、toURL: 獲取目錄路徑轉換為URL地址
DOMString entry.toURL();
返回值:DOMString : 格式為相對路徑URL
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the URL for this directory
var dirURL = entry.toURL();
plus.console.log(dirURL);
(5)、toLocalURL: 獲取目錄路徑轉換為本地路徑URL地址
DOMString entry.toLocalURL();
返回值:DOMString : 格式為本地路徑URL
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the local URL for this directory
var dirURL = entry.toLocalURL();
(6)、toRemoteURL: 獲取目錄路徑轉換為網路路徑URL地址
OMString entry.toRemoteURL();
返回值:DOMString : URL地址格式為以“http://localhost:13131/”開頭的網路路徑。
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the remote URL for this directory
var dirURL = entry.toRemoteURL();
plus.console.log(dirURL);
(7)、remove: 刪除目錄
entry.remove( succesCB, errorCB );
說明:以下情況刪除目錄將會導致失敗: 目錄中存在檔案; 刪除根目錄; 刪除目錄成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( EntrySuccessCallback ) 可選 刪除目錄成功的回撥函式
回撥函式中無引數。
errorCB: ( FileErrorCallback) 可選 刪除目錄失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// remove this directory
entry.remove( function ( entry ) {
plus.console.log( "Remove succeeded" );
}, function ( e ) {
alert( e.message );
} );
(8)、getParent: 獲取目錄所屬的父目錄
entry.getParent( succesCB, errorCB );
說明:獲取父目錄成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( EntrySuccessCallback ) 可選 獲取父目錄成功的回撥函式
errorCB: ( FileErrorCallback) 可選 獲取父目錄失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the parent DirectoryEntry
entry.getParent( function ( entry ) {
plus.console.log( "Parent Name: " + entry.name );
}, function ( e ) {
alert( e.message );
} );
(9)、createReader: 建立目錄讀取物件
DirectoryReader entry.createReader();
說明:建立一個目錄讀取物件,使用者讀取目下的檔案及子目錄。
返回值:DirectoryReader : 目錄讀取物件
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// create a directory reader
var directoryReader = entry.createReader();
(10)、getDirectory: 建立或開啟子目錄
entry.getDirectory( path, flag, succesCB, errorCB );
說明:建立或開啟當前目錄指定的目錄。 建立或開啟目錄操作成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
path: ( DOMString ) 必選 要操作目錄相對於當前目錄的地址
flag: ( Flags ) 可選 要操作檔案或目錄的引數
succesCB: ( EntrySuccessCallback ) 可選 建立或開啟目錄成功的回撥函式
errorCB: ( FileErrorCallback) 可選 建立或開啟目錄失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Retrieve an existing directory, or create it if it does not already exist
entry.getDirectory( "newDir", {create:true,exclusive:false}, function( dir ){
console.log("Directory Entry Name: " + dir.name);
}, function () {
alert( e.message );
} );
(11)、getFile: 建立或開啟檔案
entry.getFile( path, flag, succesCB, errorCB );
說明:建立或開啟當前目錄下指定的檔案。 建立或開啟檔案操作物件成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
path: ( DOMString ) 必選 要操作檔案相對於當前目錄的地址
flag: ( Flags ) 可選 要操作檔案或目錄的引數
succesCB: ( EntrySuccessCallback ) 可選 建立或開啟檔案成功的回撥函式
errorCB: ( FileErrorCallback ) 可選 建立或開啟檔案失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
plus.io.requestFileSystem( plus.io.PRIVATE_WWW, function(fs){
// fs.root是根目錄操作物件DirectoryEntry
fs.root.getFile('config.xml',{create:true}, function(fileEntry){
fileEntry.file( function(file){
var fileReader = new plus.io.FileReader();
alert("getFile:" + JSON.stringify(file));
fileReader.readAsText(file, 'utf-8');
fileReader.onloadend = function(evt) {
alert("11" + evt);
alert("evt.target" + evt.target);
alert(evt.target.result);
}
alert(file.size + '--' + file.name);
} );
});
} );
}
</script>
</head>
<body>
Request file system
</body>
</html>
(12)、removeRecursively: 遞迴刪除目錄
entry.removeRecursively( succesCB, errorCB );
說明:刪除目錄將會刪除其下的所有檔案及子目錄 不能刪除根目錄,如果操作刪除根目錄將會刪除目錄下的檔案及子目錄,不會刪除根目錄自身。 刪除目錄成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( EntrySuccessCallback ) 可選 刪除目錄成功的回撥函式
回撥函式中無引數。
errorCB: ( FileErrorCallback) 可選 刪除目錄失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// remove the directory and all it's contents
entry.removeRecursively( function ( entry ) {
plus.console.log( "Remove Recursively Succeeded" );
}, function ( e ) {
alert( e.message );
} );
2、DirectoryReader
讀取目錄資訊物件,用於獲取目錄中包含的檔案及子目錄
2.1方法
readEntries: 獲取當前目錄中的所有檔案和子目錄
directoryReader.readEntries( succesCB, errorCB );
說明:獲取當前目錄下的所有檔案和子目錄。 獲取操作成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( EntrySuccessCallback ) 可選 獲取成功的回撥函式
errorCB: ( FileErrorCallback) 可選 獲取失敗的回撥函式
返回值:void : 無
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
plus.io.requestFileSystem( plus.io.PRIVATE_WWW, function(fs){
// fs.root是根目錄操作物件DirectoryEntry
// 建立讀取目錄資訊物件
var directoryReader = fs.root.createReader();
directoryReader.readEntries( function( entries ){
var i;
for( i=0; i < entries.length; i++ ) {
alert( entries[i].name );
}
}, function ( e ) {
alert( "Read entries failed: " + e.message );
} );
} );
}
</script>
</head>
<body>
Request file system
</body>
</html>
3、File
檔案系統中的檔案資料物件,用於獲取檔案的資料
3.1屬性
size: 檔案資料物件的資料大小,單位為位元組
type: 檔案資料物件MIME型別
name: 檔案資料物件的名稱,不包括路徑
lastModifiedDate: 檔案物件的最後修改時間
3.2方法
(1)、slice: 獲取檔案指定的資料內容
file.slice( start, end );
說明:獲取檔案指定的資料內容,其中end必須大於start。
引數:
start: ( Number ) 可選 獲取檔案資料的起始位置
end: ( Number ) 可選 獲取檔案資料的結束位置
返回值:File : 指定資料內容的檔案物件
示例:
var slice1 = file.slice(100, 400);
var slice2 = slice1.slice(20, 35);
var slice3 = file.slice(120, 135);
// slice2 and slice3 are equivalent.
(2)、close: 關閉檔案資料物件
file.close();
說明:當檔案資料物件不再使用時,可通過此方法關閉,釋放系統資源。
返回值:void : 無
示例:
var slice1 = file.slice(100, 400);
var slice2 = slice1.slice(20, 35);
var slice3 = file.slice(120, 135);
// slice2 and slice3 are equivalent.
// ......
slice3.close();
4、FileEntry
檔案系統中的檔案物件,用於管理特定的本地檔案
4.1屬性:
isFile: 檔案操作物件的是否為檔案,FileEntry物件固定其值為true
isDirectory: 檔案操作物件是否為目錄,FileEntry物件固定其值為false
name: 檔案操作物件的名稱,不包括路徑
fullPath: 檔案操作物件的完整路徑,檔案系統的絕對路徑
fileSystem: 檔案操作物件所屬的檔案系統物件,參考FileSystem
4.2方法:
(1)、getMetadata: 獲取檔案的屬性資訊
entry.getMetadata( successCB, errorCB );
說明:用於獲取檔案的屬性資訊。 獲取屬性資訊成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( MetadataSuccessCallback ) 必選 獲取檔案屬性資訊成功的回撥函式
errorCB: ( FileErrorCallback ) 必選 獲取檔案屬性資訊失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Request the metadata object for this entry
entry.getMetadata( function ( metadata ) {
plus.console.log("Last Modified: " + metadata.modificationTime);
}, function () {
alert( e.message );
} );
(2)、moveTo: 移動檔案
entry.moveTo( parent, newName, succesCB, errorCB );
說明:以下情況移動目錄將會導致失敗: 要移動到的目標目錄無效; 要移動到的目標路徑被其它檔案佔用; 移動檔案成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
parent: ( DirectoryEntry ) 必選 要移動到的目標目錄
newName: ( DOMString ) 可選 移動後的檔名稱,預設為原始檔名稱
succesCB: ( EntrySuccessCallback ) 可選 移動檔案成功的回撥函式
回撥函式中的引數儲存新的檔案物件。
errorCB: ( FileErrorCallback ) 可選 移動檔案失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
function moveFile(fileEntry,dstEntry){
// move the file to a new directory and rename it
fileEntry.moveTo( dstEntry, "newfile.txt", function( entry ){
plus.console.log("New Path: " + entry.fullPath);
}, function( e ){
alert( e.message );
} );
}
(3)、copyTo: 拷貝檔案
entry.copyTo( parent, newName, succesCB, errorCB );
說明:以下情況拷貝檔案將會導致失敗: 要拷貝到的目標目錄無效; 要拷貝到的目標路徑被其它檔案佔用; 拷貝檔案成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
parent: ( DirectoryEntry ) 必選 要拷貝到的目標目錄
newName: ( DOMString ) 可選 拷貝後的檔名稱,預設為原始檔名稱
succesCB: ( EntrySuccessCallback ) 可選 拷貝檔案成功的回撥函式
回撥函式中的引數儲存新的檔案物件。
errorCB: ( FileErrorCallback ) 可選 拷貝檔案失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
function copyFile(fileEntry,dstEntry) {
// copy the file to a new directory and rename it
fileEntry.copyTo( dstEntry, "file.copy", function( entry ){
plus.console.log("New Path: " + entry.fullPath);
}, function( e ){
alert( e.message );
} );
}
(4)、toURL: 獲取檔案路徑轉換為URL地址
DOMString entry.toURL();
返回值:DOMString : 格式為相對路徑URL
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the URL for this file
var fileURL = entry.toURL();
plus.console.log(fileURL);
(5)、toLocalURL: 獲取檔案路徑轉換為本地路徑URL地址
DOMString entry.toLocalURL();
返回值:DOMString : 格式為本地路徑URL
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the local URL for this file
var fileURL = entry.toLocalURL();
plus.console.log(dirURL);
(6)、toRemoteURL: 獲取檔案路徑轉換為網路路徑URL地址
DOMString entry.toRemoteURL();
說明:URL地址格式為以“http://localhost:13131/”開頭的網路路徑。
返回值:DOMString : 網路格式路徑URL
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the remote URL for this file
var fileURL = entry.toRemoteURL();
plus.console.log(dirURL);
(7)、remove: 刪除檔案
entry.remove( succesCB, errorCB );
說明:刪除檔案成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( EntrySuccessCallback ) 可選 刪除檔案成功的回撥函式
回撥函式中無引數。
errorCB: ( FileErrorCallback ) 可選 刪除檔案失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// remove this file
entry.remove( function ( entry ) {
plus.console.log( "Remove succeeded" );
}, function ( e ) {
alert( e.message );
} );
(8)、getParent: 獲取檔案所屬的父目錄
entry.getParent( succesCB, errorCB );
說明:獲取父目錄成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( EntrySuccessCallback ) 可選 獲取父目錄成功的回撥函式
errorCB: ( FileErrorCallback ) 可選 獲取父目錄失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the parent DirectoryEntry
entry.getParent( function ( entry ) {
plus.console.log( "Parent Name: " + entry.name );
}, function ( e ) {
alert( e.message );
} );
(9)、createWriter: 獲取檔案關聯的寫檔案操作物件FileWriter
entry.createWriter( succesCB, errorCB );
說明:獲取寫檔案操作物件成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( FileWriterSuccessCallback ) 可選 獲取寫檔案操作物件成功的回撥函式
errorCB: ( FileErrorCallback ) 可選 獲取寫檔案操作物件失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// create a FileWriter to write to the file
entry.createWriter( function ( writer ) {
// Write data to file.
writer.write( "Data " );
}, function ( e ) {
alert( e.message );
} );
(10)、file: 獲取檔案資料物件
entry.file( succesCB, errorCB );
說明:獲取檔案資料物件成功通過succesCB回撥返回,失敗則通過errorCB返回。
引數:
succesCB: ( FileSuccessCallback ) 可選 獲取檔案資料物件成功的回撥函式
errorCB: ( FileErrorCallback ) 可選 獲取檔案資料物件失敗的回撥函式
返回值:void : 無
平臺支援:Android - 2.2+ (支援)、iOS - 4.3+ (支援)
示例:
// Get the parent DirectoryEntry
entry.file( function ( file ) {
plus.console.log("File size: " + file.size);
}, function ( e ) {
alert( e.message );
} );
5、FileReader
檔案系統中的讀取檔案物件,用於獲取檔案的內容
說明:FileReader物件是從裝置檔案系統讀取檔案,FileReader物件是從裝置檔案系統讀取檔案的一種方式,檔案以文字或者Base64編碼的字串形式讀出來。 使用者註冊自己的事件監聽器來接收loadstart、progress、load、loadend、error和abort事件。
5.1、構造
FileReader: 建立讀取檔案物件
5.2、常量
EMPTY: 值為0,開始讀取檔案狀態
LOADING: 值為1,正在讀取檔案狀態
DONE: 值為2,讀檔案操作完成狀態
5.3、屬性
readyState: 當前讀取檔案所處的狀態,可取上面定義的常量值,EMPTY(0)、LOADING(1)、DONE(2)。
result: 已讀取檔案的內容
error: 檔案操作錯誤程式碼
5.4、方法
(1)、abort: 終止檔案讀取操作
reader.abort();
說明:讀取檔案操作開始後,可通過此方法取消讀取檔案。呼叫此方法後將觸發檔案讀取物件的onabort事件。
返回值:void : 無
示例:
// Read data from file
var reader = null;
entry.file( function ( file ) {
reader = new plus.io.FileReader();
reader.onloadend = function ( e ) {
plus.console.log( "Read success" );
// Get data
plus.console.log( e.target.result );
};
reader.readAsText( file );
}, function ( e ) {
alert( e.message );
} );
// ......
// Abort read data from file
reader.abort();
(2)、readAsDataURL: 以URL編碼格式讀取檔案資料內容
reader.readAsDataURL( file, encoding );
說明:讀取檔案的資料內容,並將資料內容進行URL編碼。
引數:
file: ( File ) 必選 要讀取的檔案資料物件
encoding : ( DOMString ) 可選 讀取檔案資料內容的字元編碼格式,目前僅支援UTF-8編碼格式。
返回值:void : 無
示例:
// Read data from file
var reader = null;
entry.file( function ( file ) {
reader = new plus.io.FileReader();
reader.onloadend = function ( e ) {
plus.console.log( "Read success" );
// Get data
plus.console.log( e.target.result );
};
reader.readAsDataURL( file );
}, function ( e ) {
alert( e.message );
} );
(3)、readAsText: 以文字格式讀取檔案資料內容
reader.readAsText( file, encoding );
說明:讀取檔案的資料內容。
引數:
file: ( File ) 必選 要讀取的檔案資料物件
encoding : ( DOMString ) 可選 讀