读取目录内容
要读取目录的内容,可先创建 DirectoryReader
,然后调用 readEntries()
方法。
我们不能保证所有目录条目都能在仅调用一次 readEntries()
的情况下同时返回。
也就是说,您需要一直调用 DirectoryReader.readEntries()
,直到系统不再返回结果为止。以下代码对此作了说明:
- <ul id="filelist"></ul>
- function toArray(list) {
- return Array.prototype.slice.call(list || [], 0);
- }
- function listResults(entries) {
- // Document fragments can improve performance since they‘re only appended
- // to the DOM once. Only one browser reflow occurs.
- var fragment = document.createDocumentFragment();
- entries.forEach(function(entry, i) {
- var img = entry.isDirectory ? ‘<img src="folder-icon.gif">‘ :
- ‘<img src="file-icon.gif">‘;
- var li = document.createElement(‘li‘);
- li.innerHTML = [img, ‘<span>‘, entry.name, ‘</span>‘].join(‘‘);
- fragment.appendChild(li);
- });
- document.querySelector(‘#filelist‘).appendChild(fragment);
- }
- function onInitFs(fs) {
- var dirReader = fs.root.createReader();
- var entries = [];
- // Call the reader.readEntries() until no more results are returned.
- var readEntries = function() {
- dirReader.readEntries (function(results) {
- if (!results.length) {
- listResults(entries.sort());
- } else {
- entries = entries.concat(toArray(results));
- readEntries();
- }
- }, errorHandler);
- };
- readEntries(); // Start reading dirs.
- }
- window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);
删除目录
DirectoryEntry.remove()
方法的行为与 FileEntry
相应方法的行为非常相似。差别在于:尝试删除非空目录时会引发错误。
以下代码会从“/music/genres/”删除空的“jazz”目录:
- window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
- fs.root.getDirectory(‘music/genres/jazz‘, {}, function(dirEntry) {
- dirEntry.remove(function() {
- console.log(‘Directory removed.‘);
- }, errorHandler);
- }, errorHandler);
- }, errorHandler);
以递归方式删除目录
如果您不需要某个包含条目的目录,不妨使用 removeRecursively()
。该方法将以递归方式删除目录及其内容。
以下代码会以递归方式删除“music”目录及其包含的所有文件和目录:
- window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
- fs.root.getDirectory(‘/misc/../music‘, {}, function(dirEntry) {
- dirEntry.removeRecursively(function() {
- console.log(‘Directory removed.‘);
- }, errorHandler);
- }, errorHandler);
- }, errorHandler);
复制、重命名和移动
FileEntry
和 DirectoryEntry
享有共同的操作。
复制条目
FileEntry
和 DirectoryEntry
均可使用 copyTo()
复制现有条目。该方法会自动以递归方式复制文件夹。
以下代码示例会将“me.png”文件从一个目录复制到另一个目录:
- function copy(cwd, src, dest) {
- cwd.getFile(src, {}, function(fileEntry) {
- cwd.getDirectory(dest, {}, function(dirEntry) {
- fileEntry.copyTo(dirEntry);
- }, errorHandler);
- }, errorHandler);
- }
- window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
- copy(fs.root, ‘/folder1/me.png‘, ‘folder2/mypics/‘);
- }, errorHandler);
移动或重命名条目
FileEntry
和 DirectoryEntry
的 moveTo()
方法可让您移动或重命名文件或目录。
其第一个参数是文件要移动到的目标父目录,其第二个参数是文件可选的新名称。如未提供新名称,系统将使用文件的原名称。
以下示例将“me.png”重命名为“you.png”,但并不移动该文件:
- function rename(cwd, src, newName) {
- cwd.getFile(src, {}, function(fileEntry) {
- fileEntry.moveTo(cwd, newName);
- }, errorHandler);
- }
- window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
- rename(fs.root, ‘me.png‘, ‘you.png‘);
- }, errorHandler);
- 以下示例将“me.png”(位于根目录中)移动到名为“newfolder”的文件夹。
- function move(src, dirName) {
- fs.root.getFile(src, {}, function(fileEntry) {
- fs.root.getDirectory(dirName, {}, function(dirEntry) {
- fileEntry.moveTo(dirEntry);
- }, errorHandler);
- }, errorHandler);
- }
- window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
- move(‘/me.png‘, ‘newfolder/‘);
- }, errorHandler);
filesystem: 网址
FileSystem API 使用新的网址机制,(即 filesystem:),可用于填充 src 或 href 属性。例如,如果您要显示某幅图片且拥有相应的 fileEntry,您可以调用 toURL() 获取该文件的 filesystem: 网址:
- var img = document.createElement(‘img‘);
- img.src = fileEntry.toURL(); // filesystem:http://example.com/temporary/myfile.png
- document.body.appendChild(img);
另外,如果您已具备 filesystem: 网址,可使用 resolveLocalFileSystemURL() 找回 fileEntry:
- window.resolveLocalFileSystemURL = window.resolveLocalFileSystemURL ||
- window.webkitResolveLocalFileSystemURL;
- var url = ‘filesystem:http://example.com/temporary/myfile.png‘;
- window.resolveLocalFileSystemURL(url, function(fileEntry) {
- ...
- });
支持的浏览器:
Opera仅支持FileAPI IE不支持 Safari不支持 Firefox仅支持FileAPI Chrome/Chromium浏览器支持。
时间: 2024-11-16 12:07:48