在phonegap中写入和读取文件

时间:2011-08-06 15:10:15

标签: android cordova filesystems

我在writing/reading中尝试了phonegap+android个文件,这里是设置:

$(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

可能缺少什么,可以尝试什么?

4 个答案:

答案 0 :(得分:2)

这也适用于Android 2.2。你调用load();来自body的onLoad的函数,以及来自某个按钮的onClick的writeFileFromSDCard(string),将你想要写入文件的字符串作为参数传递。

<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>

答案 1 :(得分:1)

我会尝试使用FileReady和FileWriter API。

http://docs.phonegap.com/phonegap_file_file.md.html#FileReader

答案 2 :(得分: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);
}

答案 3 :(得分:-1)

以下适用于我的Android with 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>