2011-08-06 242 views
6

我试图writing/reading一个文件中phonegap+android,这里是设置:写入和读取文件中的PhoneGap

$(document).ready(function() { 
    document.addEventListener("deviceready", deviceready, true); 

    $(document).bind("deviceready", function(){ 
    //writeFile(); 
    //readFile(); 
    }); 
}); 

function deviceready() { 
    writeFile(); 
    readFile(); 
} 

// This is just to do this. 
function readFile() { 
    var d = navigator.file.read('/sdcard/foo.xml', success(), fail()); 
    console.warn(d); 
} 

function writeFile() { 
    navigator.file.write('/sdcard/foo.xml', "This is a test of writing to a file", 
      success(), fail()); 
} 

但在模拟器的Android 2.2,我得到了以下错误消息:

08-06 14:21:29.428: INFO/Web Console(936): Error in success callback: Network Status1 = TypeError: Result of expression 'navigator.file' [undefined] is not an object. at file:///android_asset/www/phonegap.0.9.6.js:649 

什么可能会丢失,什么可以尝试?

+1

可能定),您使用的成功(),而不是你的呼叫成功背部同样为不合格(要失败 –

回答

-1

对我来说,以下工作在Android上的PhoneGap-1.0.0:

<script type="text/javascript" charset="utf-8" src="css-js/phonegap-1.0.0.js"></script> 
    <script type="text/javascript" charset="utf-8"> 

    // Wait for PhoneGap to load 
    // 
    document.addEventListener("deviceready", onDeviceReady, false); 

    // PhoneGap is ready 
    // 
    function onDeviceReady() { 
     window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 

    } 

    function gotFS(fileSystem) { 
     var path = "readme.txt"; 
     fileSystem.root.getFile(path, {create: true, exclusive: false}, gotFileEntry, fail); 

    } 

    function gotFileEntry(fileEntry) { 

     fileEntry.createWriter(gotFileWriter, fail); 
    } 

    function gotFileWriter(writer) { 
     writer.onwrite = function(evt) { 
      console.log("write success"); 
     }; 
     writer.write("some sample text"); 
</script> 
+1

。甚至没有链接来给予信贷。 – jlarson

+0

这甚至没有读取文件 –

+0

写文件对我来说工作得很好 –

2

这也适用于Android 2.2的。你调用load();函数从body的onLoad,并从某个按钮的onClick写入FileFromSDCard(字符串),作为参数传递你想写入文件的字符串。

<script type="text/javascript" charset="utf-8"> 

// Event listener  
function load() { 
    document.addEventListener('deviceready', init, false); 
} 

// Called when device is ready - Do nothing 
    function init() { 
}  

// Called to write file to card 
    function writeFileFromSDCard(param) { 

    var writer = new FileWriter("/sdcard/write.txt"); 
    writer.write(param + "\n", false);    
    alert("file Written to SD Card"); 
} 

</script> 
+0

我可以问你,为什么你知道如何使用API​​:FileWriter? – Stallman

+0

问你,为什么你知道如何使用API​​:FileWriter? 我参考了http://www.w3.org/TR/file-system-api/#dfn-filewriter 但它没有提到这个工具:FileWriter(“path”);而当我使用Media(〜)类时,路径的设置不需要“/ sdcard /”,为什么我们需要在FileWriter中添加此路径? 我发现关于API的一些描述。请帮忙,谢谢! – Stallman

+0

我们可以通过哪条路?我也没有找到任何具体的信息呢? – trainoasis

1

这是我基于几个链接想出来的。我一直在寻找这样做。我用这个网站作为一个参考http://www.digitalnoiz.com/mobile-development/mobile-file-explorer-with-phonegapcordova-and-jquery-mobile-part-1/还有Phonegap文件API参考

function displayMessage(msg) 
{ 
    navigator.notification.alert(msg); 
} 

function loadDirectories(fileSystem) 
{ 
    directoryEntry = fileSystem.root; 

    var directoryReader = directoryEntry.createReader(); 

    directoryReader.readEntries(function(entries){ 
      var sOutput = ""; 
      for(var i=0; i < entries.length; i++) 
      { 
       if(!entries[i].isDirectory) 
       { 
        fileSystem.root.getFile(entries[i].name,null,gotFileEntry,fail); 
       } 
      }        
      //displayMessage(sOutput); 
     },fail); 
} 
function gotFileEntry(fileEntry) 
{ 
    fileEntry.file(function(file){ 
     var reader = new FileReader(); 
     reader.onloadend = function(evt){ 
     displayMessage(evt.target.result); 
    }; 
reader.readAsText(file);       
    },fail); 
} 
function failFile(evt) 
{ 
    displayMessage(evt.target.error.code); 
} 
function fail(error) 
{ 
    displayMessage("Failed to list directory contents: " + error.code); 
} 
function onBodyLoad() 
{  
document.addEventListener("deviceready", onDeviceReady, false); 
}  
function onDeviceReady() 
{ 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, loadDirectories, fail); 
}