Liste aus gespeicherten Dateien erstellen

  • Antworten:20
  • Bentwortet
Aaron B.
  • Forum-Beiträge: 206

06.03.2013, 19:34:46 via App

Hallo, ich möchte eine App programmieren, bei der eine Liste aus Text-Dateien im Verzeichnis "/sdcard/TXFiles" erstellt wird und bei einem onListItemClick der String "name" der Text des gewählten ListItems wird. (item.getText();)

Die Dateien enden auf .sf:

-testA.sf,
-testB.sf


layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ListView
android:id="files"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

</LinearLayout>



Wie kann man das in Java programmieren?

— geändert am 06.03.2013, 19:50:01

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2013, 19:52:08 via App

Also ein bisschen gedanken machen solltest du dir schon.
Tipp lies dazu eine Anleitung über die ListView.
Die Textdateien kannst du als String einlesen und dann parsen.
(Wenn es viele Listeinträge sind, würde ich dir eine Datenbank empfelen.)
Die Einzelnen Listeinträge müssen dann nur noch angezeigt werden und auf einen Klick reagieren.

— geändert am 06.03.2013, 19:53:04

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aaron B.
  • Forum-Beiträge: 206

06.03.2013, 20:16:05 via App

Pascal
Die Einzelnen Listeinträge müssen dann nur noch angezeigt werden und auf einen Klick reagieren.

Genau darum geht es ja. :/ Ich weiß nicht, wie ich die Dateien anzeigen lassen kann und wie ich die ListItems dann wie die Dateien benennen kann.

— geändert am 06.03.2013, 20:18:01

Antworten
Aaron B.
  • Forum-Beiträge: 206

06.03.2013, 20:43:41 via App

Ich kann Dateien schon lesen aber diese dann als ListView zu integrieren ... Zum besseren Verständnis: Ich möchte, dass alle Dateien im Ordner angezeigt werden. Die beiden Dateien testA und testB sind nur Beispiele :)

Antworten
impjor
  • Forum-Beiträge: 1.793

06.03.2013, 20:49:53 via App

Du möchtest also, dass

" Test A"
"Test B"

so angezeigt wird, oder? Warum erstellst du dann nicht eine Index Datei, die als Inhalt
"Test A
Test B
..."

enthält?

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Aaron B.
  • Forum-Beiträge: 206

06.03.2013, 21:02:09 via App

Weil ich möchte, dass man jederzeit in einem Datei-Explorer Dateien hinzufügen und entfernen kann.

Gruß zurück :)

An sich soll der ListView die Dateien aus dem Verzeichnis anzeigen. Damit ich dann später weiß, welche Datei ich verändern muss, möchte ich den Namen des ListItems, dass man angeklickt hat, in einen String "name" speichern.

— geändert am 06.03.2013, 21:04:23

Antworten
Christian
  • Forum-Beiträge: 307

06.03.2013, 21:35:11 via Website

Hi,

also wenn ich dich richtig verstehe möchtest du in der ListView die Dateien aus einem Order auf der SD-Card anzeigen.

Dazu benötigst du als erstes den Pfad auf diesen Ordner. Mit diesem Pfad erstellst du dann ein File-Objekt.
1File path = new File(Pfad_zum_ordner);

So jetzt musst du nur noch die Funktion listFiles() aufrufen. Diese gibt dir die Namen der Dateien in dem Ordner zurück. Jetzt musst du nur diese einer ArrayListe hinzufügen und diese ArrayListe übergibst du dann deiner ListView.

Mfg Christian

— geändert am 06.03.2013, 21:38:32

Antworten
Aaron B.
  • Forum-Beiträge: 206

06.03.2013, 21:35:42 via App

Gibt es einen Weg, alle Dateien im Verzeichnis "/sdcard/TXFiles", die die Endung ".sf" haben, als String-Array aufzulisten? Das müsste doch eig. funktionieren, oder?

LG

Antworten
Aaron B.
  • Forum-Beiträge: 206

06.03.2013, 21:36:36 via App

Danke :)

Antworten
impjor
  • Forum-Beiträge: 1.793

06.03.2013, 21:39:06 via App

Achso :D
Ja am besten du erzeugst ein String-Array mit den Werten, die in die listview sollen. dann musst du einen Adapter erzeugen, der die Schnittstelle zwischen listview und Array ist.

ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, deinStringArray);

das ist ein Standard android Adapter.

den dann einfach an die listview übergeben
listView.setAdapter(adapter);

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Aaron B.
  • Forum-Beiträge: 206

06.03.2013, 21:56:16 via App

Sry aber ich bin noch ein Neuling, deshalb kann ich noch die einfachsten Sachen nicht :D

lv ist mein ListView.
filesPath ist ein String mit dem Datei-Pfad.

File ok = new File(filesPath);
ok.mkdirs();
String files[] = {ok.listFiles().toString()};

ArrayAdapter a = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, files);
lv.setAdapter(a);


Wenn ich die App starte kommt folgendes als ListItem: Ljava.io.File;@415b2278. Was mach ich falsch?

LG

Antworten
impjor
  • Forum-Beiträge: 1.793

06.03.2013, 22:05:57 via App

was du mit ok.mkdirs() machst weiß ich nicht. aber die Funktion gibt ein file- Array zurück.
also

File[] files = ok.listFiles();

dann musst du über eine schleife den Namen der Datei ( also dem File- Objekt) herausfinden.

das geht über File.getName();

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Aaron B.
  • Forum-Beiträge: 206

06.03.2013, 22:18:28 via App

mkdirs(); erstellt das Verzeichnis, falls es noch nicht existiert.

Könntest du mir die Schleife an einem Beispielcode zeigen?

LG

Antworten
Christian
  • Forum-Beiträge: 307

07.03.2013, 12:47:20 via Website

Hi,


Könntest du mir die Schleife an einem Beispielcode zeigen?
mmhh damit du deinen eigenen Kopf auch ein bissel benutzten kannst das ganze mal in Pseudocode.

Pseudocode:
1ermittle die Länge bzw. Anzahl der ELemente im Array;
2
3Schleife(von i=0 bis Anzahl der Elemente im Array){
4
5 ermittle das File-Objekt an der Stelle i;
6
7 ermittle den Namen der Datei;
8
9 füge den Namen dem ArrayList-Objekt hinzu;
10
11}
12
13übergebe die Arraylist an deine ListView;

Die Schleife sollte eigentlich keine Problem sein da dis wirkliche Java Basics sind.

Mfg Christian

— geändert am 07.03.2013, 12:51:56

Antworten
Aaron B.
  • Forum-Beiträge: 206

07.03.2013, 13:46:02 via App

Ok ich hab eine Lösung gefunden :)

lv = ListView
filesPath = mein Pfad

Script:

List<String> dirFiles = new ArrayList<String>();
File dirDir = new File(filesPath);
dirDir.mkdirs();
File[] files = dirDir.listFiles();

for (File file : files){
dirFiles.add(file.getName());
}

ArrayAdapter a = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dirFiles);
lv.setAdapter(a);





Gibt es einen Weg, um nur Ordner anzuzeigen?

Antworten
Christian
  • Forum-Beiträge: 307

07.03.2013, 14:35:55 via Website

Na war doch garnicht so schwer :)


Gibt es einen Weg, um nur Ordner anzuzeigen?
Es ist der gleiche Weg denn du bis jetzt auch schon gegangen bist.
Wenn du dir die Doku zur Klasse File noch mal ansiehst wirst du feststellen das die Klasse ein paar Funktionen besitzt die dein Problem lösen können.

Viel Spass beim ausprobieren

mfg Christian

— geändert am 07.03.2013, 14:36:13

Antworten
Aaron B.
  • Forum-Beiträge: 206

07.03.2013, 15:49:21 via App

Ok das hätte ich dann auch :D

jetzt hab ich aber noch ein kleines Problem:

ich habe eine Activity zum erstellen einer neuen Datei.
Dazu habe ich ein EditText, in welches man den Namen der neuen Datei eingeben soll.
In dieses EditText sollen aber nur die Zeichen 0-9, a-z & A-Z eingegeben werden können.
Ich muss das in Java programmieren (also nicht in xml).

Ich habe es mit folgendem probiert:

EditText et = new EditText(this);
et.setKeyListener(DigitsKeyListener.getInstance("qwertzuiopasdfghjklyxcvbnmäöüßQWERTZUIOPASDFGHJKLYXCVBNMÄÖÜß0123456789"));
et.setHint("Name eingeben");

Dann wird aber eine Numern-Tastatur geöffnet.

Wenn ich zusätzlich noch folgendes eingebe, funktioniert der Digits-Befehl nicht mehr, so dass man alle Zeichen eingeben kann:

et.setInputType(InputType.TYPE_CLASS_TEXT);


Wenn ich aber statt diesen Codes folgenden Code eingebe, kommt eine gewöhnliche CLASS_TEXT-Tastatur:

et.setInputType(InputType. TYPE_TEXT_VARIATION_PERSON_NAME);


LG

Antworten
Aaron B.
  • Forum-Beiträge: 206

07.03.2013, 16:59:10 via App

Ich hab gerade das I-Net durchforstet und nix gefunden :/ wie würde dass funktionieren? :)

Beispielscript? ;)

LG

— geändert am 07.03.2013, 23:18:29

Antworten
Aaron B.
  • Forum-Beiträge: 206

08.03.2013, 15:38:29 via App

Vielen Dank an eure Hilfe :)

Die App ist jetzt komplett fertig :)

LG

— geändert am 17.03.2013, 08:56:43

Antworten