Пытаюсь получить список файлов, чтобы я мог назвать следующий файл, исходя из того, сколько их уже есть. Идея аналогична загрузке нескольких файлов с одинаковым именем. Например:
имя файла.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));
Любая помощь очень ценится, спасибо.