Hallo alle zusammen,
ich sitze gerade an einem Problem, bei dem ich aktuell leider nicht mehr weiter weiß. Ich hoffe, einer von euch kann mich auf die richtige Spur bringen.
Ich schreibe an einer App, die unter anderen interne Daten in eine Textdatei schreiben und auch wieder auslesen soll. Das Schreiben der Textdateien ist kein Problem, Zugriffsrechte auf den Ordner (öffentlicher Ordner "Documents") habe ich manuell gesetzt bzw. prüfe ich an separater Stelle. Dateien und Unterordner werden auch als existent erkannt. Der folgende Code simuliert die gewünschte Funktion:
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
protected String temp_String_0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
}
public void button1(View view) throws IOException {
// Pfad zum öffentlichen Ordner
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
// Pfad zum Unterordner
File file_dir = new File(dir + "/folder0/");
// Anlegen des Unterordners, falls noch nicht existent
if (!file_dir.exists()) {
file_dir.mkdir();
}
// Anlegen der Datei
File file = new File(file_dir + "/schreibtest1.txt");
// Schreiben des Inhalts
temp_String_0 = "schreibtest1";
FileWriter out = new FileWriter(file);
out.write(temp_String_0);
// Datei schließen
out.close();
// Prüfung auf Existenz der Datei
if (file_dir.exists()) {
binding.textView1.setText("OK");
}
else {
binding.textView1.setText("Not OK");
}
}
public void button2(View view) throws IOException {
String temp_String_0 = "";
// Pfad zum öffentlichen Ordner
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
// Pfad zur Datei
File file = new File(dir + "/folder0/schreibtest1.txt");
// Einlesen der Datei
if (file.exists()) {
Boolean temp_boolean_0 = file.canRead(); // Wert im Debug Modus sichtbar
Scanner temp_Scanner_0 = new Scanner(file);
temp_String_0 = temp_Scanner_0.nextLine();
temp_Scanner_0.close();
binding.textView2.setText(temp_String_0);
}
else {
binding.textView2.setText("fail");
}
}
Alles anzeigen
Die entsprechende App zeigt hier 2 Buttons und 2 Textzeilen. Der erste Button schreibt die Textdatei, der zweite Button liest diese wieder ein und gibt den Inhalt auf die zweite Textzeile aus. Dies funktioniert auch soweit, ABER sobald ich die Textdatei händisch in den entsprechenden Ordner kopiere, wird diese nicht mehr eingelesen und die App stürzt ab (bzw. liefert eine Exception und stoppt).
Im Debug Modus kann ich sehen, dass die kopierte Textdatei zwar als existent erkannt wird, aber kein Lesezugriff möglich ist. Ich habe hier die Vermutung, dass ein anderer Prozess die Textdatei blockiert??? Kann ich dies irgendwie ändern oder die Leserechte manuell setzen?
Die Zugriffsrechte für die App habe ich manuell in den Android Einstellungen gesetzt. Eine entsprechende Prüfung im Code bestätigt die Lese- und Schreibrechte auch.
Vorschläge oder Ideen?
Danke schon mal für die Hilfe ...