Java Dateien mit Array erstellen

xMoritzx

Cadet 4th Year
Registriert
Mai 2012
Beiträge
127
Hallo!
Habe ein Programm was ich umsetzen möchte, was nun aber nicht weiter wichtig ist. Ich habe mich erst ab heute mich mit Files beschäftigt.
Wenn ich für ein File den Speicher reserviere, kann ich daran wie gewohnt Punktationen verwenden (bsp.: .exist()). Werde aber nun mit mehreren Dateien arbeiten und möchte nicht für jede ein catch&try machen. Deshalb habe ich die Filenamen in ein Array gespeichert und das ganze in eine Schleife gepackt.
Es handelt sich um ein String Array, so etwas wie File Array gibt es ja nicht, oder?

So sieht mein Ansatz aus: (oder Pastebin: http://pastebin.com/QDX9DfAD, übersichtlicher)
Code:
		//Variablen fuer Textdateien
		File namen = new File ("namen.txt");
		File adressen = new File ("adressen.txt");
		File telefonnummern = new File ("telefonnummern.txt");
		String[] datei = {"namen", "adressen", "telefonnummern"};

		
		//Noetige Dateien, falls erforderlich erstellen
		for (int i = 0; i < datei.length; i++)
		{
			if (!datei[i].exists())
			{
				try
				{
					boolean erstellen = datei[i].createNewFile();
					
					if (erstellen)
					{
						System.out.println(datei[i] + ".txt wurde erstellt!");
					}
					else 
					{
						System.out.println(datei[i] + ".txt wurde nicht erfolgreich erstellt!");
					}
				}
				catch (IOException ex)
				{
					ex.printStackTrace();
				}
				
			}
		}

Irgendwelche Lösungen?
 
Das was du machst kann nicht funktionieren. Du prüfst auf ein Array in dem nur Strings stehen? Was soll das bezwecken? Ist vollkommen falsch.
Wenn dann musst du ein File[] dateien Array machen und darin die File-Objekte ablegen
 
Hi,

Irgendwelche Lösungen?

was ist denn überhaupt dein Problem? Stelle doch bitte erstmal eine Frage, bevor du nach einer Lösung frägst.

Was ich direkt sehe: "String[] datei = {"namen", "adressen", "telefonnummern"};" hier ist kein ".txt" am Ende der Dateinamen!

Wieso arbeitest du denn überhaupt nur mit den Strings? Verstehe ich nicht so ganz...pack doch die Files einfach in ein File-Array!

VG,
Mad
 
Also der Ansatz scheint ja gar nicht so verkehrt zu sein, allerdings wird der Compiler nicht von alleine herausfinden, dass du mit den Namen im Array "datei" eigentlich die drei File Instanzen meinst ;-).

Statt einem String Array müsstest du ein File Array aufbauen, in das du die 3 File Instanzen steckst.
 
Nun ja, ich möchte nicht für jede Datei (3 Stück) ein extra try&catch machen. Habe die File-Instanzen durch Strings ersetzt, das er irgendwie erkennt. (Neuling :freak:)

Wäre ein File Array etwa so:
File[] dateien = {namen, adressen, telefonnummern};

?

//Edit: Scheint zu funktionieren. Dachte Arrays gibt es nur mit int, long, double etc. Also diesen 8 bekannten Datentypen :freaky:

Desweiteren:
Mein Programm funktioniert ganz gut, nur ab einen bestimmten Scanner, also wo der User was in die Konsole eingibt, geht nichts mehr. Ich kann nichts mehr eingeben? Was könnte das Problem sein?

So sieht die Stelle aus:
System.out.println("Möchten sie fortfahren? (J/N)");
wiederholen = input.nextLine();

Zum Scanner kommt es gar nicht mehr, da das Programm vorher endet?!
 
Zuletzt bearbeitet:
xMoritzx schrieb:
Nun ja, ich möchte nicht für jede Datei (3 Stück) ein extra try&catch machen. Habe die File-Instanzen durch Strings ersetzt, das er irgendwie erkennt.

Nee, ein String ist ein String. Damit kann man alles mögliche anstellen, aber wenn man Methoden der Klasse "File" verwenden möchte, muss man zuerst eine Instanz dieser Klasse haben (es sei denn, die Methode wäre statisch).

Methoden hattet ihr? Die kann (und sollte) man auch selbst erstellen. Dann könnte man z.B. einen Varargs-Parameter deklarieren und Java das Erstellen des Arrays überlassen. Das ginge mit Strings, um den Aufruf möglichst einfach zu machen. Die File-Instanzen könnte man dann beim Iterieren erstellen (und prüfen).


xMoritzx schrieb:
Wäre ein File Array etwa so:
File[] dateien = {namen, adressen, telefonnummern};

?

//Edit: Scheint zu funktionieren. Dachte Arrays gibt es nur mit int, long, double etc. Also diesen 8 bekannten Datentypen

Arrays kann man mit allen Typen erstellen. Heutzutage verwendet man aber meist Collections: ArrayList etc. und die entsprechenden Interfaces.

xMoritzx schrieb:
Ich kann nichts mehr eingeben? Was könnte das Problem sein?

Zum Scanner kommt es gar nicht mehr, da das Programm vorher endet?!

Was sagt der Debugger? Ein lauffähiges Beispiel wäre hilfreich.
 
Ne, Methoden hatten wir noch nicht. Trotzdem danke für die Erklärung! :)

Der Debugger sagt nichts. Also ich drücke auf und der führt das Programm ganz normal aus. Selber Fehler wie vorher.

Hier ist mein bisheriger Code des Programms: http://pastebin.com/Cf128kyn (Kann durchaus verrutscht sein! Das Problem ist bei Zeile 116!)
 
1. Benutze eine Entwicklungsumgebung, wie zum Beispiel Eclipse. Wenn du das nicht willst, lies genau durch, was dir dein Compiler ankreidet.

2. Du bist gerade in dem Stadium, in dem du einfach alles was du in die Finger bekommst per Copy&Paste zusammenwirfst und hoffst, dass am Ende etwas Feines dabei rauskommt. Tu das nicht! Versuche bitte einmal bei jeder Zeile deines Codes einen Kommentar zu schreiben, was der Code macht und noch viel wichtiger warum du das machst. Das sollte dir stark weiterhelfen.

Ansonsten bleibt mir zu sagen, dass wir hier im "Programmieren" Unterforum doch ein gewisses Maß an Eigeninitiative erwarten. Wir sind eigentlich ein wirklich hilfsbereiter Haufen (besonders Soares und Madman sind so Kandidaten, die immer viel Zeit in Hilfestellungen stecken), jedoch uns einfach so einen Haufen Code hinzuklatschen und zu sagen "geht nich!" ist ein wenig mau ;)

Identifiziere dein Problem, versuche es zu lösen, und wenn das nicht gelingt sind wir die richtigen Leute für dich!
 
xMoritzx schrieb:
Der Debugger sagt nichts. Also ich drücke auf und der führt das Programm ganz normal aus. Selber Fehler wie vorher.

Wenn das Programm wider Erwarten durchläuft, stimmt etwas mit Deiner Programmlogik nicht. Welche Stelle ist hier wohl relevant? Da einen Breakpoint setzen, den Debugger starten und sich durch das Programm steppen (bei Eclipse F5/F6, Tutorials gibt es zuhauf). Notfalls kann man den Debugger auch ohne Breakpoint starten, aber die Programmausführung anhalten (Eclipse bietet hierfür die Option "Stop in main" in der Debug-Konfiguration).

Der Fehler ist trivial und fällt mit Erfahrung auch ohne Debugger auf. Aber wenn man nicht genau weiß, was vor sich geht, ist der Debugger ein unverzichtbares Hilfsmittel. Damit solltest Du den Fehler zumindest selbst eingrenzen können und hättest etwas sehr wichtiges gelernt.

Es gibt übrigens die Funktion String#equalsIgnoreCase(), damit könntest Du Dir den zweiten Methodenaufruf im while-Test sparen.
 
Zurück
Oben