Javascript build.phonegap写入文件时出现问题

Javascript build.phonegap写入文件时出现问题,javascript,android,cordova,phonegap-plugins,phonegap-build,Javascript,Android,Cordova,Phonegap Plugins,Phonegap Build,我正试图通过构建一个应用程序,该应用程序应该同时在和上运行,但这个问题集中在Android部分 应用程序的主要目标是能够访问和修改文件系统。 受此启发,我最终编写了一个与他的非常类似的示例应用程序,它以读/写权限访问文件系统。主要区别在于,我的应用程序是在线构建的,没有安装任何SDK,也不关心任何androidManifes.xml文件 我的问题是我能够访问文件系统(列出目录、读取文件),但我不能在上面写任何东西 为了获得文件访问权限,我已包括: <feature name="http:/

我正试图通过构建一个应用程序,该应用程序应该同时在和上运行,但这个问题集中在Android部分

应用程序的主要目标是能够访问和修改文件系统。 受此启发,我最终编写了一个与他的非常类似的示例应用程序,它以读/写权限访问文件系统。主要区别在于,我的应用程序是在线构建的,没有安装任何SDK,也不关心任何androidManifes.xml文件

我的问题是我能够访问文件系统(列出目录、读取文件),但我不能在上面写任何东西

为了获得文件访问权限,我已包括:

<feature name="http://api.phonegap.com/1.0/file"/>
写入/追加文件代码: 第二个代码示例没有在目标文件中写入任何内容,
onerror
处理程序显示这是由于
NOT\u FOUND\u ERR
造成的。这根本没有意义,因为我可以读取相同的文件(并且可以找到)

同样,当我尝试创建一个新文件时(使用write/append file code中的相同代码,但目标文件不存在),我会得到一个
无效\u修改\u ERR
错误

我也尝试过,我得到了同样的结果(读和不写)

请注意,由于PhoneGap使用的是HTML5文件,因此我尝试按照中(以及其他网站)的建议编写内容,但没有任何运气

我错过了什么?我是否需要一个单独的插件来编写文件,或者这是不能通过在线构建工具完成的,我必须下载SDK并以老式的方式编译应用程序

注意:我的PhoneGap版本是2.3.0

我用写入文件系统的PG build创建的,所以我确信它可以完成,并且不需要插件。我在代码中看到的主要显著区别是,我将getFile选项中的exclusive标志显式设置为false

如果您正在使用iOS进行测试,另一个解决方案是检查您是否在config.xml中正确设置了应用程序id


编辑:在我提到的应用程序中,文件系统写入代码是

以下是我用于写入文件的Java方法:

public void writeMyFile(String fileName, String data) throws IOException {

    File root = Environment.getExternalStorageDirectory();
    System.out.println(root);
    File gpxfile = new File(root, fileName);

    FileWriter writer = new FileWriter(gpxfile);
    String[][] recordvalue = new String[100][100];
    System.out.println("fetched value" + data);
    String[] line = data.split("#");

    // I had multiple lines of data, all split by the # symbol in a single string.
    System.out.println("row length "+line.length);

        for (int i=1; i<line.length; i++)
        {
            writer.append("#");
            recordvalue[i] = line[i].split(",");
            for(int j=0; j<recordvalue[i].length; j++) {
                System.out.println(recordvalue[i][j]);
                writer.append(recordvalue[i][j]);
                writer.append(",");
            }
            writer.append("\n");
        }

    Uri uri = Uri.fromFile(gpxfile);
    System.out.println(uri);

    writer.flush();
    writer.close();

    try {
        // Do something
    }
    catch (Exception e) {
        // If there is nothing that can send a text/html MIME type
        e.printStackTrace();
    }
}
插件的主要执行类如下:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;

import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;

import com.phonegap.api.Plugin;
public PluginResult execute(String arg0, JSONArray arg1, String arg2) {
    try {
         String fileName = arg1.getString(0);
         String data = arg1.getString(1);
         writeMyFile(fileName, data);
    }
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
首先,确保在设备准备好后以正确的方式呼叫

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, yourCode, fail);
}

其次,确保fileName只是一个没有路径的文件名,如果你想使用目录,你应该使用。

手机有SD卡吗?如果您以正常方式编译,它也可以工作吗?@Warpzit是的,手机有一个SD卡,目标文件就在上面;没有,我只是通过build.phonegap.com试过了文件名的实际值是多少?你是想写在根目录还是子目录上?为他的问题提供解决方案,而不是建议另一种方法。这也可以作为评论发布。这是解决方案。他使用的代码只是我代码的一小部分。我基本上是给他所有他缺少的部分,以确保他拥有完整的工作代码。这正是我请求文件系统的方式,正如我所说,我可以访问(读取)文件名是文件名还是路径?我记得在使用文件路径时遇到了问题,如果它可以用于读取而不能用于写入,我也不会感到惊讶。
public PluginResult execute(String arg0, JSONArray arg1, String arg2) {
    try {
         String fileName = arg1.getString(0);
         String data = arg1.getString(1);
         writeMyFile(fileName, data);
    }
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, yourCode, fail);
}