Ответ 1
Осторожно или нет, внешнее хранилище по-прежнему может быть единственным способом. Без доступа root к устройству вы не можете получить ни одного "внутреннего", если только вы не будете в порядке с чтением в приложении на устройстве. Документы предоставляют довольно прочные рекомендации по созданию внешних файлов, а если вы используете API 8 или выше, есть несколько дополнительных функций, которые можно использовать. Я уверен, что вы знаете эту страницу, но здесь все равно: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
Если вам нужен какой-либо код файла io example... Я думаю, что я мог бы выкопать...
EDIT - я бы начал с ознакомления с рекомендациями в вышеупомянутых документах, чтобы сначала подтвердить состояние хранилища. У меня, к сожалению, нет опыта добавления файла на Java, так что кто-то еще определенно будет более квалифицированным, чтобы отвечать. Это не распространяется на добавление, но у меня есть резервная копия в одном из моих личных приложений, который выглядит примерно так.
File backupPath = Environment.getExternalStorageDirectory();
backupPath = new File(backupPath.getPath() + "/Android/data/com.maximusdev.bankrecord/files");
if(!backupPath.exists()){
backupPath.mkdirs();
}
FileOutputStream fos;
try {
fos = new FileOutputStream(backupPath.getPath() + "/recordsbackup.txt");
if(okaytowrite){
for(int i = 0; i < count; ++i){
entry = adapter.getItem(i);
fos.write(entry.toString().getBytes());
fos.write("\n".getBytes());
fos.write(String.valueOf(entry.dateTime).getBytes());
fos.write("\n".getBytes());
fos.write(String.valueOf(entry.sign).getBytes());
fos.write("\n".getBytes());
fos.write(String.valueOf(entry.cleared).getBytes());
fos.write("\n".getBytes());
fos.write(String.valueOf(entry.transDate).getBytes());
fos.write("\n".getBytes());
fos.write(entry.category.getBytes());
fos.write("\n".getBytes());
}
}
fos.close();
Toast.makeText(this, "Backup Complete", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
AlertDialog.Builder delmessagebuilder = new AlertDialog.Builder(this);
delmessagebuilder.setCancelable(false);
delmessagebuilder.setMessage("File Access Error");
delmessagebuilder.setNeutralButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
delmessagebuilder.create().show();
} catch (IOException e) {
e.printStackTrace();
AlertDialog.Builder delmessagebuilder = new AlertDialog.Builder(this);
delmessagebuilder.setCancelable(false);
delmessagebuilder.setMessage("File Access Error");
delmessagebuilder.setNeutralButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
delmessagebuilder.create().show();
}
Как только я буду готов писать, я вытаскиваю пользовательский объект (запись) из ArrayAdapter (адаптера) и преобразую значение поля в строки и используя getBytes(), чтобы перейти к функции записи FileOutputStream. Я провел некоторое исследование, и есть немало других возможностей для написания файлов в Java/Android... например, для класса FileWriter, поэтому он нуждается в дальнейших исследованиях.