Получить внутренний путь к файлу

Открываю внутренний файл и пишу ему так:

final String NEWLINE = new String(newLine+"\n");     
FileOutputStream fOut = openFileOutput(fileName+".txt",MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fOut); 
osw.write(NEWLINE);

Мне нужен способ проверить, существует ли внутренний файл (fileName+".txt").

Если нет, запишите новую строку в файл, иначе добавьте новую строку в файл.

Я попытался:

File file = getBaseContext().getFileStreamPath(fileName+".txt");
if(file.exists())...

Но я не знаю внутреннего пути к файлу, и он не работает.

Какие-либо предложения?

Подробнее:

private void writeStringToFile(String fileName, String newLine) {
    final String NEWLINE = new String(newLine + "\n");
    FileOutputStream fOut = null;
    OutputStreamWriter osw = null;
    try { // catches IOException below
        File file = getFileStreamPath(fileName + ".txt");
        if (!file.exists()) {
            Log.d("DAVID", "File not exist now create him");
            fOut = openFileOutput(fileName + ".txt", MODE_WORLD_READABLE);
            osw = new OutputStreamWriter(fOut);
        } else {
            Log.d("DAVID", "File already exist");
            osw = new OutputStreamWriter(fOut);
        }
        // Write the string to the file
        osw.append(NEWLINE);
        // osw.write(NEWLINE);
        // ensure that everything is really written out and close
        osw.flush();
        osw.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

В первый раз все в порядке - я получаю: «Файл не существует, теперь создайте его» для входа во второй раз, когда я получаю FATAL ERROR из-за нулевого указателя. Я думаю, это потому, что osw получает null fOut

osw  = new OutputStreamWriter(fOut);

Но как я могу предотвратить это?


person David    schedule 10.12.2011    source источник
comment
Пожалуйста, попробуйте объяснить свои симптомы, а не делать бессмысленные заявления, будто это не работает. FWIW, getFileStreamPath() должно работать нормально, хотя я бы не стал использовать getBaseContext() — просто вызовите getFileStreamPath() на существующем Context. Или используйте getFilesDir(), чтобы получить объект File, куда openFileOutput() записывает свои файлы.   -  person CommonsWare    schedule 11.12.2011
comment
вы можете сохранить имена файлов, которые вы использовали, в списке, а затем см. if (list.contains(filename)).   -  person Phil    schedule 11.12.2011


Ответы (1)


Приведенный выше код был настолько неправильным, что мне просто пришлось его переписать:

private void apendStringToInternalFile(String fileName, String newLine)
        throws FileNotFoundException, UnsupportedEncodingException,
        IOException {
    newLine = new String(newLine + "\n");
    FileOutputStream fOut = openFileOutput(fileName + ".txt",
            Context.MODE_APPEND | Context.MODE_WORLD_READABLE);
    // MODE_WORLD_READABLE is _deprecated_
    try {
        // ALWAYS SPECIFY ENCODING -
        OutputStreamWriter osw = new OutputStreamWriter(fOut, "UTF-8");
        BufferedWriter buffer = new BufferedWriter(osw);
        buffer.write(newLine);
        buffer.flush();
    } finally {
        try {
            fOut.close();
        } catch (IOException e) {
            // Log this to be on the safe side -
            e.printStackTrace();
        }
    }
}

Очевидно, что всей проблемы не существует. openFileOutput создаст файл, если он не существует, и добавление флага Context.MODE_APPEND добавит, если файл существует. Копировать свободно

person Mr_and_Mrs_D    schedule 06.05.2013