2

我研究了下面的链接,但它没有回答我的问题。 http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

如果标题中问题的答案是肯定的。有人可以提供一个简单的示例来创建子文件夹并将文件添加到该文件夹​​吗?也许展示如何从子文件夹中读取文件?

或者也许告诉我为什么下面的例子惨败

更改file.mkdirs() 后现在可以使用;file.getParentFile().mkdirs();
以下答案中的Se解释

public static void Test(String path, String fileName, String fileStr, Context ctx)
{

    SaveFile(path, fileName, fileStr, ctx);
    String returnFileStr = ReadFile(path, fileName, ctx);
}
public static Boolean pathExists(String path, Context ctx)
{
    Boolean result = false;
    String[] pathSeqments = path.split("/");
    String pathStr = "";
    for(int i = 0;i<pathSeqments.length;i++ )
    {
        pathStr += pathSeqments[i];
        if(!new File(ctx.getFilesDir() +"/" + pathStr).exists())
        {
            result = false;
            break;
        }
        pathStr += "/";
        result = true;
    }
    return result;
}

public static void SaveFile(String path, String fileName, String fileStr, Context ctx) {
    try {           
        File file = new File(ctx.getFilesDir() +"/" + path, fileName); //new File(ctx.getFilesDir() +"/" + path + "/" + fileName);
        file.getParentFile().mkdirs();

        FileOutputStream fOut = new FileOutputStream(file);
        OutputStreamWriter osw = new OutputStreamWriter(fOut);

        osw.write(fileStr);

        osw.flush();
        osw.close();

    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

public static String ReadFile(String path, String fileName, Context ctx) {
    String fileStr = null;
    try {           
        if(pathExists(path, ctx))
        {
            File file = new File(ctx.getFilesDir() +"/" + path, fileName);
            FileInputStream fIn = new FileInputStream(file);

            StringWriter writer = new StringWriter();

            IOUtils.copy(fIn, writer, "UTF-8");
            fileStr = writer.toString();
        }

    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return fileStr;
}
4

1 回答 1

6

是否可以使用内部存储创建和维护包含文件的文件夹结构

是的,使用标准 Java I/O。

或者也许告诉我为什么下面的例子惨败

有才华的程序员知道如何描述症状,而不是使用诸如“失败得很惨”之类的无意义的短语。

话虽如此,file.mkdirs();创建一个目录。然后,您尝试打开该目录,就好像它是一个文件一样,以便将数据写入其中。这不适用于我知道的任何操作系统,当然也不适用于 Android。请调用mkdirs()将创建文件父目录的内容(例如,file.getParentFile().mkdirs())。

此外,永远不要使用串联来创建File对象。使用正确的File构造函数。

于 2012-02-14T15:13:54.790 回答