使用纯Javascript在Android上通过Mosync/PhoneGap从SD卡读取文件

3

我知道这个问题以前被问过很多次,但我无论如何都解决不了。 我能够在sdcard上的目录中写入一个文本文件(android 4),但无法使用以下代码读取它:

function get_file () {  
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, getFilesystem, fail);
}   
function getFilesystem(fs) {
alert("getFilesystem -> backup.txt");  // OK !
// alert("filesystem.name: "+fileSystem.name);  // = persistent
// alert("filesystem.root.name: "+fileSystem.root.name);  // = long number
    // 
fs.root.getFile("../../../../../../sdcard/test/backup.txt", {create: false, exclusive: false}, 
    function(fileEntry) {
      alert(fileEntry.fullPath); // shows that my path is appended to "data/.."
      fileEntry.file(function(file) {
      var reader = new FileReader();
      reader.onloadend = function(evt) {
        alert(+evt.target.result);  // NOT SHOWING !        
          };
        reader.readAsText(file);
    }, fail);
}, fail);
}
我使用writer函数将文件写入sdcard/test目录中,使用../的顺序-这是一个丑陋的代码,但有效!但是,fs.root.getFile的工作方式不同-它返回的fullPath信息显示我的给定路径被附加到“/data/data/com.appname/files”,而不是替换它!由于我从未收到警报消息,因此onloadend函数显然无法正常工作,也没有收到错误消息。将路径更改为“file:///sdcard/test”或“sdcard/test”也没有任何效果。非常感谢您的帮助-提前致谢!Chris
2个回答

0
请参考PHONEGAP文档。 从中,您将获得一个从SD卡获取文件的工作示例。 如果您在下载文件时遇到问题,请参考链接。 我认为应该使用“backup.txt”而不是“/sdcard/backup.txt”。 它似乎可以正常工作。 PhoneGap会处理路径的详细信息,并且还可以与目录一起使用。

这是我尝试了两周的内容,你可以看到我的代码实际上是PhoneGap文档。如果我只使用“backup.txt”作为路径,程序将在应用程序“文件”目录中查找此文件。我的问题仍然是,如何访问我自己选择的SDCARD上任何目录中的文件?Phonegap不会处理它,如果我不能将其写入代码中,它怎么知道我想要使用哪个目录?请给出具体的示例以帮助解决问题。 - Chris

0
最终我终于弄明白了: 要访问目录(在Android 4.0,三星Note 8上),我必须从/data/data/com.app-name/files/apps/(random no.)/一路向上返回到sdcard,选择所有目录。
 fs.root.getFile("../../../../../../sdcard/test/backup.txt", ...

在Mosync Reload客户端中。

使用Mosync apk“编译”应用程序只需要4次“../”,因为文件层次结构比Reload客户端低。无论如何,都必须在文件浏览器中检查(需要root访问权限)。与此不同的是,在云端使用PhoneGap编译时 - 然后确实根路径是sdcard!然后您无法进入数据目录,据我所知。

这个路径在mosync中可以进行写和读操作 - 我的错误是文本文件中有换行符“\n”。在这种情况下,我可以将其写入,但读取器会停止而没有错误消息。

希望这也能帮助其他人!

Chris


你好 Chris,能否发布一下代码?我试着将你的第一组代码复制/粘贴到我的 Apache Cordova 项目中,但它无法运行。我已经搜索了两周,如何使用 Cordova 函数操作文件 :/ 在这里发布了两篇文章。 - zelocalhost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,