Input/Output Datei anhand von Dateinamen einlesen

Diskutiere Datei anhand von Dateinamen einlesen im Java Basics - Anfänger-Themen Bereich.
E

EisteePfirsich

Hallo liebes Forum,
ich bin neu hier und das ist mein Erster Beitrag. Ich studiere zur Zeit Informatik und habe aber auch schon Java-Erfahrungen aus der Schule. Im Rahmen meiner Vorlesung Algorithmen und Datenstrukturen muss ich wöchentlich Hausaufgaben erledigen. Einer dieser Aufgaben bereitet mir grade Schwierigkeiten, weswegen ich mich nun an euch wende. Wortlaut wie folgt:
Schreiben Sie eine Klasse FigureMover, welche die main-Methode des Programms enthält. Das Programm soll einen Dateinamen als Kommandozeilenargument einlesen und diese Datei mit einer Methode Figure[] readFigures(String filename) lesen.
Ich soll also eine Datei einlesen. Schön und gut, hab ich schon mal gemacht. Die Klassen File und Filereader erfordern aber beide den Dateipfad und nicht den Dateinamen. So kenne ich das noch aus früheren Aufgaben. Man gibt halt den Dateipfad an und kann dann mit readLIne() auslesen. Es wird aber in der Aufgabenstellung verlangt, dass die Datei anhand des Dateinamens eingelesen wird. Es ist mir nicht klar, ob der Ersteller des Aufgabenblatts hier in diesem Kontext den Pfad meint. Ich bezweifle es aber. Gibt es eine Art Standardverzeichnis, in das ich die Datei legen muss, sodass sie anhand ihres Namens gefunden werden kann?
Kommandozeileneingabe ist: figures.txt
figures.txt hab ich einfach mal meinem Package hinzugefügt.
Meine IDE ist Eclipse.
Konsole sagt im Moment Exception in thread "main" java.io.FileNotFoundException: figures.txt (Das System kann die angegebene Datei nicht finden)
Ich verwende Windows 10 Pro 64-Bit
Das ist mein Code bis jetzt:

Java:
package aufgabenblatt_05;

import java.io.*;

public class FigureMover {

    public static void main(String[] args) throws IOException {
        readFigures(args[0]);

    }
    public static Figure[] readFigures(String filename) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(filename));
        System.out.println(br.readLine());
        return null;
    }
}
Danke im Voraus für die hilfreichen Antworten
Liebe Grüße
Leon
 
Zuletzt bearbeitet von einem Moderator:
J

JustNobody

Also ich würde das so verstehen, dass er die Datei im aktuellen Verzeichnis erwartet oder eben relativ dazu. Du nimmst also den Parameter und öffnest ihn einfach.

Dann ist halt das Arbeitsverzeichnis der Applikatipn das entscheidende. Wenn du den Parameter aber einfach 1:1 nimmst, dann kann das statt einem einfachen Dateinamen auch einen relativen oder absoluten Pfad enthalten.
 
E

EisteePfirsich

Also ich würde das so verstehen, dass er die Datei im aktuellen Verzeichnis erwartet oder eben relativ dazu. Du nimmst also den Parameter und öffnest ihn einfach.

Dann ist halt das Arbeitsverzeichnis der Applikatipn das entscheidende. Wenn du den Parameter aber einfach 1:1 nimmst, dann kann das statt einem einfachen Dateinamen auch einen relativen oder absoluten Pfad enthalten.
Ich hab figures.txt mal in mein Standardarbeitsverzeichnis gelegt, habe aber den gleichen Fehler erhalten.
 
E

EisteePfirsich

Also ich würde das so verstehen, dass er die Datei im aktuellen Verzeichnis erwartet oder eben relativ dazu. Du nimmst also den Parameter und öffnest ihn einfach.

Dann ist halt das Arbeitsverzeichnis der Applikatipn das entscheidende. Wenn du den Parameter aber einfach 1:1 nimmst, dann kann das statt einem einfachen Dateinamen auch einen relativen oder absoluten Pfad enthalten.
Oh ich habs hinbekommen. figures.txt liegt jetzt im Hauptordner des Projekts. Das funktioniert. Viele dank für die Hilfe.
 
J

JustNobody

Super, evtl. noch als kurze Anmerkung: Wenn man unsicher ist, wo das Arbeitsverzeichnis genau ist, dann kann man sich das auch einfach einmal ausgeben lassen. Dazu z.B. ein File vom Verzeichnis "." erzeugen und dann den ganzen Pfad ausgeben lassen...

Das könnte also eine interessante Ergänzung bei der Fehlerbehandlung sein: bei FileNotFoundException eine Ausgabe machen a.la. Datei xyz in Verzeichnis abc nicht gefunden.
 
A

advanced_java

Das ist relativ einfach. Mit file.isAbsolute() kannst du überprüfen, ob ein absoluter oder relativer Pfad gegeben ist:
Java:
	public static class Figure {
		public Figure(String l) {
			// TODO Auto-generated constructor stub
			// create/parse your Figure here...
		}
	}

	public static void main(String[] args) throws IOException {
		readFigures(args[0]);

	}

	public static Figure[] readFigures(String filename) throws IOException {
		File file = new File(filename);
		if (file.isAbsolute()) {
			throw new IllegalArgumentException("Bitte relativen Pfad zum Arbeitsverzeichnis angeben.");
		}
		ArrayList<Figure> figures = new ArrayList<>();
		try (BufferedReader br = new BufferedReader(new FileReader(file))) {
			String l;
			while ((l = br.readLine()) != null) {
				figures.add(new Figure(l));
			}
		}
		return figures.stream().toArray(Figure[]::new);
	}
 
Thema: 

Datei anhand von Dateinamen einlesen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben