从SD卡读取文本文件并使用手机间隙显示

时间:2012-04-09 11:15:47

标签: android cordova

我有example.txt文件sdcard,我想用手机间隙显示它。我是新手android和手机差距请帮忙。 这是我的example.txt文件:

     <h2>This file is in sdcard</h2>

这是我的phonegap.java

    package com.example.phonegap;
    import org.apache.cordova.DroidGap;

     public class Phonegap extends DroidGap{
        /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/myfile.html");
       }

    }

以下是www:

中的myfile.html
       <!DOCTYPE html>
     <html>
     <head>
      <title>FileReader Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova-1.5.0.js"></script>
    <script type="text/javascript" charset="utf-8">

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

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

    function gotFS(fileSystem) {
        fileSystem.root.getFile("file:///sdcard/example.txt", {create: true}, gotFileEntry, fail);
    }

    function gotFileEntry(fileEntry) {
        fileEntry.file(gotFile, fail);
    }

    function gotFile(file){
        readDataUrl(file);
        readAsText(file);
    }

    function readDataUrl(file) {
        var reader = new FileReader();
        reader.onloadend = function(evt) {
            console.log("Read as data URL");
            console.log(evt.target.result);
        };
        reader.readAsDataURL(file);
    }

    function readAsText(file) {
        var reader = new FileReader();
        reader.onloadend = function(evt) {
            console.log("Read as text");
            console.log(evt.target.result);
        };
        reader.readAsText(file);
    }

    function fail(evt) {
        console.log(evt.target.error.code);
    }

    </script>
  </head>
  <body>
    <h1>Example</h1>
    <p>Read File</p>
  </body>
</html>

3 个答案:

答案 0 :(得分:2)

更改此行:

fileSystem.root.getFile("file:///sdcard/example.txt", {create: true}, gotFileEntry, fail);

是这样的:

fileSystem.root.getFile("example.txt", {create: false}, gotFileEntry, fail);

假设您要读取的文件是“example.txt”并且位于/ sdcard文件夹中。

答案 1 :(得分:2)

我也遇到了同样的问题。我不认为Phonegap中的API文档是对的,所以我提到了 JavaScript:权威指南,我发现了两个关键点:

  1. 我准备阅读的文件的位置。 - &GT;我发现默认的父路径是:/ mnt / sdcard。所以“/mnt/sdcard/temp/test.txt”文件写成fileSystem.root.getFile("temp/test.txt", null, gotFileEntry, fail)

  2. reader.readAsText(file)之后,仅使用element.innerHTML = reader.result无法在HTML文件中显示结果。 所以我添加一个回调:

    reader.onload = function(){
        element.innerHTML = reader.result
    }
    
  3. 调整完两个部分后,我的代码就可以了!

    StackOverflow具有非常严格的上传格式策略,因此我无法上传确切的代码。但是你可以联系我索取代码。

答案 2 :(得分:1)

我假设example.txt位于SD卡的根目录(不在文件夹中)。然后更改您的代码,

function gotFS(fileSystem) {
        fileSystem.root.getFile("file:///sdcard/example.txt", {create: true}, gotFileEntry, fail);
    }

function gotFS(fileSystem) {
        fileSystem.root.getFile("example.txt", {create: true}, gotFileEntry, fail);
    }

尝试在下面的函数中使用alert,

function readAsText(file) {
        alert("readAstext");
        var reader = new FileReader();
        reader.onloadend = function(evt) {


               console.log("Read as text");
                console.log(evt.target.result);
                alert("content : "+evt.target.result);
            };
            reader.readAsText(file);
}

如果这不起作用,请将以下代码添加到HTML

中的正文标记中
 <body onload='onLoad();'>

让我知道您可能遇到的问题。 感谢,,