Можно ли создавать и поддерживать структуру папок с файлами с помощью внутреннего хранилища - PullRequest
2 голосов
/ 14 февраля 2012

Я изучил ссылку ниже, но она не отвечает на мой вопрос. http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

Если ответ на вопрос в названии - да. Может ли кто-то приведите простой пример создания подпапки и добавления файла в эту папку? И, возможно, показать, как прочитать файл обратно из подпапка?

Или, может быть, скажите мне, почему приведенный ниже пример терпит неудачу

Работает сейчас после изменения file.mkdirs (); на file.getParentFile (). Mkdirs ();
Само объяснение в следующем ответе

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

1 Ответ

6 голосов
/ 14 февраля 2012

Можно ли создавать и поддерживать структуру папок с файлами с помощью внутреннего хранилища

Да, с использованием стандартного ввода-вывода Java.

Или, может быть, скажите мне, почему приведенный ниже пример с треском проваливается

Талантливые программисты знают, как описывать симптомы, вместо того, чтобы использовать бессмысленные фразы типа «с треском проваливается».

Как говорится, file.mkdirs(); создает каталог. Затем вы пытаетесь открыть этот каталог, как если бы это был файл, для записи данных в него. Это не работает ни на одной операционной системе, о которой я знаю, и, конечно, не на Android. Пожалуйста, вызовите mkdirs() для чего-то, что создаст родительский каталог файла (например, file.getParentFile().mkdirs()).

Кроме того, никогда не используйте конкатенацию для создания File объекта. Используйте правильный конструктор File.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...