为了更好地理解 FileEntry
,本部分还提供了执行常规任务的众多技巧。创建文件您可以使用文件系统的 getFile()
(DirectoryEntry 接口的一种方法)查找或创建文件。
请求文件系统后,系统会向成功回调传递FileSystem
对象,
其中包含指向该应用相应文件系统的根的 DirectoryEntry
(fs.root
)。
以下代码会在该应用相应文件系统的根中创建名为“log.txt”的空白文件:
- function onInitFs(fs) {
-
- fs.root.getFile('log.txt', {create: true, exclusive: true}, function(fileEntry) {
-
- // fileEntry.isFile === true
- // fileEntry.name == 'log.txt'
- // fileEntry.fullPath == '/log.txt'
-
- }, errorHandler);
-
- }
-
- window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);
请求文件系统后,系统会向成功处理程序传递 FileSystem
对象。我们可以将回调中的 fs.root.getFile()
命名为要创建的文件的文件名。您可以传递绝对路径或相对路径,但该路径必须有效。
例如,如果您尝试创建一个其直接父级文件不存在的文件,
将会导致出错。getFile()
的第二个参数是在文件不存在时从字面上说明函数行为的对象。
在此示例中,create: true
会在文件不存在时创建文件,
并在文件存在时 (exclusive: true
) 引发错误。
如果 create: false
,系统只会获取并返回文件。
无论是哪种情况,系统都不会覆盖文件内容,
因为我们只是获取相关文件的引用路径。
通过名称读取文件以下代码会检索名为“log.txt”的文件,
并使用 FileReader
API 读取文件内容,
然后将其附加到页面上新的 <textarea>。如果 log.txt 不存在,系统将引发错误。
- function onInitFs(fs) {
-
- fs.root.getFile('log.txt', {}, function(fileEntry) {
-
- // Get a File object representing the file,
- // then use FileReader to read its contents.
- fileEntry.file(function(file) {
- var reader = new FileReader();
-
- reader.onloadend = function(e) {
- var txtArea = document.createElement('textarea');
- txtArea.value = this.result;
- document.body.appendChild(txtArea);
- };
-
- reader.readAsText(file);
- }, errorHandler);
-
- }, errorHandler);
-
- }
-
- window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);
写入到文件以下代码会创建名为“log.txt”的空白文件(如果该文件不存在),并在文件中填入“Lorem Ipsum”文字。
- function onInitFs(fs) {
-
- fs.root.getFile('log.txt', {create: true}, function(fileEntry) {
-
- // Create a FileWriter object for our FileEntry (log.txt).
- fileEntry.createWriter(function(fileWriter) {
-
- fileWriter.onwriteend = function(e) {
- console.log('Write completed.');
- };
-
- fileWriter.onerror = function(e) {
- console.log('Write failed: ' + e.toString());
- };
-
- // Create a new Blob and write it to log.txt.
- var bb = new BlobBuilder(); // Note: window.WebKitBlobBuilder in Chrome 12.
- bb.append('Lorem Ipsum');
- fileWriter.write(bb.getBlob('text/plain'));
-
- }, errorHandler);
-
- }, errorHandler);
-
- }
-
- window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);