Android připsání textu do existujícího souboru
Ahoj.
Snažím se takto připisovat text do souboru:
private void writeNameToDocument(String data,Context context) {
try {
File file = new File(cestaKDokumentum, souborJmeno.getText().toString()+".csv");
FileWriter buf = new FileWriter(file.getAbsoluteFile(),true);
buf.write(data + System.getProperty("line.separator") ); // Chci připisovat na konec souboru
buf.close();
}
catch (IOException e) {
MessageBox("Exception File write failed: " + e.toString());
}
}
Kód probíhá v pořádku, ale má jednu obrovskou vadu.
Když jej spustím znovu, tak přemaže původní obsah souboru a připíše tam jen to poslední.
Proc nepouzijes FileOutputStream v APPEND modu?
To jsem tuším zkoušel taky, ale nefungovalo to, moment hodím sem i tento kód.
Jo už vím.
FileOutputStream přebírá jen tupě jméno souboru.
Pokud to udělám na SD kartě, a tam je cesta nutná, tak mi to spadne na tom, že
používám úplnou cestu k souboru a mám tam lomítka (file separator).
Opakovane poustim a pripisuje. Zkouseno v JDK11...
Takhle.
Já používám teda toto:
File file = new File(cestaKDokumentum, souborJmeno.getText().toString()+".csv");
FileOutputStream buf = new FileOutputStream(file, true);
buf.write(data.getBytes());
buf.write(System.getProperty("line.separator").getBytes());
buf.close();
A když to 2x spustím, tak v souboru zůstane jen poslední záznam.
Teda houby. Ono to nepřipisuje. Tak to je.
Tak bud nemas pravo zapisu, nebo nic nezapisujes. Mi to funguje...
Ano, už se na to dívám a problém bude někde v androidu.
Abych byl konkrétní skenuju kód.
A naskenovaný kód chci připisovat do souboru:
Intent intent = new Intent(ACTION_SCAN);
intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
startActivityForResult(intent, 0);
A následně:
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
//get the extras that are returned from the intent
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
writeNameToDocument(contents, this);
Toast toast = Toast.makeText(this, "Naskenováno:" + contents + ", " + souborJmeno.getText() + ".csv", Toast.LENGTH_LONG);
toast.show();
}
}
}
Funkce pro zápis writeNameToDocument vypadá takto:
private void writeNameToDocument(String data,Context context) {
try {
File file = new File(cestaKDokumentum, souborJmeno.getText().toString()+".csv");
FileOutputStream buf = new FileOutputStream(file, true);
buf.write(data.getBytes());
buf.write("HALO".getBytes());
buf.close();
MediaScannerConnection.scanFile(MainActivity.this, new String[] {cestaKDokumentum + File.separator + souborJmeno.getText() + ".csv" }, null, null);
}
catch (IOException e) {
MessageBox("Exception File write failed: " + e.toString());
}
}
Absolutně to nechápu. Chybu to nepíše žádnou, nepadá.
Jakoby se to podruhé ani neprovedlo. Přičemž v toastu to píše naskenovaný kód v pořádku !
A tenhle radek dela s tim souborem co? Pouzivej tag code, tohle se neda cist...
No to se právě stará o to, aby ten soubor byl vůbec vidět z PC.
Ale na občerstvování to zjevně nestačí.
Pro Android neprogramuju, ale Google nějakou inspiraci určitě najde, např.
https://www.okhelp.cz/android/write-file-java-android-example/
nebo
https://stackoverflow.com/questions/27415074/android-save-to-file-txt-appending
Děkuji všem rádcům za nápovědu.
Chyba byla klasicky v občerstvování souboru připojeného mobilu.
Takže to chodí super, ale změna se neprojevuje v připojeném mobilu hned.
PROKLÍNÁM ANDROID.