Сохранение нескольких файлов с одинаковыми именами во внутренней памяти Android и их отображение в виде списка в другом действии

Пытаюсь получить список файлов, чтобы я мог назвать следующий файл, исходя из того, сколько их уже есть. Идея аналогична загрузке нескольких файлов с одинаковым именем. Например:

имя файла.txt

имя файла(1).txt

имя файла(2).txt

так далее...

это текущий метод, который я использую, который возвращает список строк.

private List<String> getFilenames(String path) {

    File files = new File(path);

    FileFilter filter = new FileFilter() {

        private final List<String> exts = Arrays.asList("json");

        @Override
        public boolean accept(File pathname) {
            String ext;
            String path = pathname.getPath();
            ext = path.substring(path.lastIndexOf(".") + 1);
            return exts.contains(ext);
        }
    };

    final File [] filesFound = files.listFiles(filter);
    List<String> list = new ArrayList<String>();
    if (filesFound != null && filesFound.length > 0){
        for (File file : filesFound){
            list.add(file.getName());
        }
    }
    return list;

Когда у меня есть список, я думаю, что могу использовать метод list.length, чтобы выяснить, какое число мне нужно поместить в имя файла.

Здесь я создаю файл.

            JSONObject jsonToSave = createJSONObject();

            String filepath = "fileStorage";

            List<String> filenames = getFilenames(filepath);

            int filenameNumber = filenames.size() + 1;

            ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
            File directory = contextWrapper.getDir(filepath, Context.MODE_PRIVATE);

            filename = "newAssessment(" + filenameNumber + ").json";
            internalFile = new File(directory , filename);

            try {
                FileOutputStream fos = new FileOutputStream(internalFile);
                OutputStreamWriter osw = new OutputStreamWriter(fos);
                osw.write(jsonToSave.toString());
                osw.close();

                Context context = getApplicationContext();
                CharSequence text = "Assessment saved!";
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(context, text, duration);
                toast.show();
            }
            catch (IOException e){
                e.printStackTrace();
            }

createJSONObject просто создает объект json с данными, которые необходимо сохранить.

Я могу подтвердить, что приложение переходит к Toast, который находится в блоке try после закрытия OutputStreamWriter, поэтому файл сохраняется.

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке заполнить ListView в другом действии некоторыми данными из файлов ничего не появляется в списке. Я успешно проверил чтение одного файла.

Я использую тот же метод getFilenames, что и выше, затем использую FileInputStream для чтения данных из файлов, анализирую их в объект json, добавляю некоторые поля из каждого файла в массив, а затем обновляю список Android с помощью массива.

Вот код:

    filenames = getFilenames(filepath);

    ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
    File directory = contextWrapper.getDir(filepath, Context.MODE_PRIVATE);


    for (String filename : filenames) {

        internalFile = new File(directory, filename);
        try {
            FileInputStream fis = new FileInputStream(internalFile);
            DataInputStream in = new DataInputStream(fis);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));

            String assessmentDate = "";
            String orchard = "";
            String strLine;
            int dataCounter = 0;

            while ((strLine = br.readLine()) != null) {
                myData = myData + strLine;
                try {
                    JSONObject object = new JSONObject(myData);
                    assessmentDate = object.getString("assessmentDate");
                    orchard = object.getString("orchard");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                data.add(dataCounter, assessmentDate + " : " + orchard);

                dataCounter++;
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
    LVAssessments.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data));

Любая помощь очень ценится, спасибо.


person mgrantnz    schedule 22.04.2016    source источник
comment
Попробуйте прочитать это: stackoverflow.com/questions/23345048/   -  person Mattia    schedule 03.11.2016