FileWriter / FileReader Problem

D

ds1337

Mitglied
Hallo,

ich bin gerade beim Thema File-Writer/Reader und habe ein kleines Problem.

Ich würde gerne per Scanner einen Dateinamen einlesen lassen, welcher anschließend im FileWriter für den Namen der Datei genutzt wird, das habe ich auch hinbekommen, allerdings kann ich anschließend im FileReader nicht mehr auf die Variable "dateiName" zugreifen, da diese ja nur lokal in der Methode schreibeInDatei() sichtbar ist.

Wie löse ich das Problem am besten?

Java:
import javafx.application.Application;
import javafx.stage.Stage;
import java.io.*;
import java.util.Scanner;

/**
 * @author
 */

public class IOString extends Application {

    public static void main(String[] args) throws IOException {
        schreibeInDatei();
        leseAusDatei();
    }

    /**
     * Liest Dateinamen und Dateitext als Strings ein und schreibt anschließend Dateitext in eine generierte Datei
     *
     * @throws IOException
     */
    public static void schreibeInDatei() throws IOException {
        Scanner input = new Scanner(System.in);
        System.out.println("Text der in Datei geschrieben werden soll: ");
        String dateiText = input.next();
        System.out.println("Namen der Datei eingeben: ");
        String dateiName = input.next();
        input.close();

        FileWriter fileWriter = new FileWriter(dateiName);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        bufferedWriter.write(dateiText);
        bufferedWriter.close();

    }


    /**
     * Liest Text aus oben erstellter Datei
     *
     * @throws IOException
     */
    public static void leseAusDatei() throws IOException {
        FileReader fileReader = new FileReader(dateiName); // <- cannot resolve symbol "dateiName"
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        bufferedReader.close();
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

    }
}
 
H

httpdigest

Top Contributor
1. Das ganze ist ganz bestimmt keine JavaFX Application, also kannst du das `extends Application` entfernen.
2. Lagere das Abfragen des Dateinamens per Scanner in eine separate Methode aus, die eben den eingegebenen Dateinamen als Rückgabewert zurück gibt.
3. Führe einen neuen String Parameter in leseAusDatei und schreibeInDatei ein, der der Dateiname ist, den du von der Methode aus 2. zurückgegeben bekommst. Das heißt, du rufst diese beiden Methoden dann mit einem Argument auf.
 
D

ds1337

Mitglied
Danke für deine Antwort!

Habe den Code entsprechend angepasst, er spuckt mir aber folgendes aus :/

Java:
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
    at IOString.nameEinlesen(IOString.java:28)
    at IOString.leseAusDatei(IOString.java:57)
    at IOString.main(IOString.java:65)

Java:
import java.io.*;
import java.util.Scanner;

/**
 * @author
 */

public class IOString {

    public static String textEinlesen() {
        Scanner input = new Scanner(System.in);
        System.out.println("Text der in Datei geschrieben werden soll: ");
        String dateiText = input.nextLine();
        input.close();

        return dateiText;
    }

    public static String nameEinlesen() {
        System.out.println("Dateinamen eingeben");
        Scanner input = new Scanner(System.in);
        String dateiName = input.nextLine();

        return dateiName;

    }

    /**
     * Liest Dateinamen und Dateitext als Strings ein und schreibt anschließend Dateitext in eine generierte Datei
     *
     * @throws IOException
     */
    public static void schreibeInDatei() throws IOException {

        FileWriter fileWriter = new FileWriter(nameEinlesen());
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        bufferedWriter.write(textEinlesen());
        bufferedWriter.close();


    }


    /**
     * Liest Text aus oben erstellter Datei
     *
     * @throws IOException
     */
    public static void leseAusDatei() throws IOException {
        FileReader fileReader = new FileReader(nameEinlesen());
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        bufferedReader.close();
    }


    public static void main(String[] args) throws IOException {
        schreibeInDatei();
        leseAusDatei();
    }
}
 
H

httpdigest

Top Contributor
Deine Lösung entspricht ganz und garnicht dem, was ich schrieb. Bitte lese noch einmal ganz ganz genau meinen Vorschlag. Weißt du, was ein Methodenparameter ist?
 
D

ds1337

Mitglied
1. Das ganze ist ganz bestimmt keine JavaFX Application, also kannst du das `extends Application` entfernen.
2. Lagere das Abfragen des Dateinamens per Scanner in eine separate Methode aus, die eben den eingegebenen Dateinamen als Rückgabewert zurück gibt.
3. Führe einen neuen String Parameter in leseAusDatei und schreibeInDatei ein, der der Dateiname ist, den du von der Methode aus 2. zurückgegeben bekommst. Das heißt, du rufst diese beiden Methoden dann mit einem Argument auf.

die JavaFX Referenz habe ich entfernt, das Abfragen des Dateinamens habe ich wie du vorgeschlagen hast in eine separate Methode nameEinlesen() ausgelagert.

Bezüglich dem 3. Punkt bin ich etwas verwirrt, also klar sind mir Methodenparameter bekannt allerdings würde das ganze beim Aufruf in der main() ja dann so aussehen -> schreibeInDatei(textEinlesen()) und leseAusDatei(nameEinlesen()) führt er dann nicht alles doppelt und dreifach aus?
 
kneitzel

kneitzel

Top Contributor
Aber auch wenn es nicht das ist, was vorgeschlagen wurde möchte ich den Fehler kurz erläutern:

In textEinlesen schließt du den Scanner auf Sytem.in und damit auch System.in. Wenn du dann später erneut versuchst, aus System.in mit einem neuen Scanner zu lesen, dann ist System.in ja schon geschlossen und Du bekommst beim Versuch diese Exception.

Scanner sollte man auch nicht so massiv erstellen. Mein Vorschlag bei sowas ist ein public static Scanner der immer genutzt wird und nie geschlossen.
 
H

httpdigest

Top Contributor
Du musst das Ergebnis von nameEinlesen offensichtlich in einer Variablen speichern.
Java:
String dateiname = nameEinlesen();
schreibeInDatei(dateiname);
leseAusDatei(dateiname);
 
D

ds1337

Mitglied
eine kurze Frage hätte ich noch zu
String dateiname = nameEinlesen();
schreibeInDatei(dateiname);
leseAusDatei(dateiname);

die erstellten Variablen müssen dann aber als static deklariert werden richtig? Denn die Methoden sind ja auch alle static
 
H

httpdigest

Top Contributor
Nein. Das ist eine ganz normale lokale Variable in einer Methode. Genauso wie der Scanner oder der FileReader/FileWriter.
Nochmal um es ganz deutlich zu machen:
Java:
public static void main(String[] args) throws IOException {
    String dateiname = nameEinlesen();
    schreibeInDatei(dateiname);
    leseAusDatei(dateiname); 
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Problem mit Filereader und filewriter Java Basics - Anfänger-Themen 20
L FileReader und Filewriter Java Basics - Anfänger-Themen 4
Burny91 FileReader / FileWriter / BufferedWriter An einer bestimmten Zeile String ersetzten Java Basics - Anfänger-Themen 2
A Datei Ein und Ausgabe FileWriter und printWriter Java Basics - Anfänger-Themen 5
O Ausgabe als .txt Datei speichern mit FileWriter Java Basics - Anfänger-Themen 2
B FileWriter nicht sichtbar? Java Basics - Anfänger-Themen 4
D Methoden Filewriter macht keine Zeilenumbrüche Java Basics - Anfänger-Themen 3
D FileWriter schreibt nicht in Datei Java Basics - Anfänger-Themen 14
Z FileWriter erzeugt Symbole Java Basics - Anfänger-Themen 8
C FileWriter bzw. Reader fehlerhaft Java Basics - Anfänger-Themen 6
C FileWriter Problem. Java Basics - Anfänger-Themen 2
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
D Nur aus Interesse: Warum verwendet man FileWriter.flush()? Java Basics - Anfänger-Themen 4
B FileWriter und JFileChooser zusammenfügen Java Basics - Anfänger-Themen 3
B FileWriter close() muss? Java Basics - Anfänger-Themen 8
Java-Insel Methoden FileWriter Methoden funktionieren nicht Java Basics - Anfänger-Themen 20
D Erste Schritte Warum try-catch für FileWriter Java Basics - Anfänger-Themen 5
G Effizienzsteigerung von FileWriter als Logging Java Basics - Anfänger-Themen 4
O Datentypen double in string über fileWriter... Java Basics - Anfänger-Themen 7
O OOP fileWriter Dateiname übergeben Java Basics - Anfänger-Themen 12
R Klassen FileWriter und CharSet Java Basics - Anfänger-Themen 4
Luk10 FileWriter Java Basics - Anfänger-Themen 6
W Problem mit FileWriter / ActionListener Java Basics - Anfänger-Themen 6
O Integer in File mit Filewriter schreiben - geht nicht richtig Java Basics - Anfänger-Themen 4
M Probleme mit FileWriter Java Basics - Anfänger-Themen 7
M FileWriter innerhalb runnable Jar Java Basics - Anfänger-Themen 8
C FileWriter mit einer Variable Java Basics - Anfänger-Themen 8
S FileWriter - in neue Zeile schreiben!? Java Basics - Anfänger-Themen 19
K FileWriter Speicherort Java Basics - Anfänger-Themen 7
T OOP Speichern mit BufferedWriter(FileWriter(File)) Java Basics - Anfänger-Themen 2
S FileWriter Java Basics - Anfänger-Themen 3
S Filewriter schreibt einfach nicht Java Basics - Anfänger-Themen 6
G FileWriter -> neue Zeile Java Basics - Anfänger-Themen 13
F Seltsame Zeichen und kein Zeichenumbruch mit Filewriter Java Basics - Anfänger-Themen 4
G FileWriter Java Basics - Anfänger-Themen 3
G FileWriter Java Basics - Anfänger-Themen 6
T FileWriter Java Basics - Anfänger-Themen 5
M FileWriter Java Basics - Anfänger-Themen 18
J Problem mit FileWriter Java Basics - Anfänger-Themen 24
N Schneller als FileWriter? Java Basics - Anfänger-Themen 28
M FileWriter-Problem Java Basics - Anfänger-Themen 2
P FileWriter schreiben? Java Basics - Anfänger-Themen 4
L Streamklassen, Filewriter und StringBuffer Java Basics - Anfänger-Themen 2
D FileWriter write? Zeilenumbruch ? Java Basics - Anfänger-Themen 4
G Prüfen mit FileWriter Java Basics - Anfänger-Themen 6
N Problem mit FileWriter Java Basics - Anfänger-Themen 2
S FileWriter-Variable nicht initialisiert Java Basics - Anfänger-Themen 3
R FileWriter: Dort wieder anfangen, wo er aufgehört hat Java Basics - Anfänger-Themen 4
S FileWriter funzt nicht :( Java Basics - Anfänger-Themen 5
S Mit FileReader lesen, in ArrayList speichern Java Basics - Anfänger-Themen 4
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
W FileReader - Bitte um Erklärung Java Basics - Anfänger-Themen 7
L FileReader Java Basics - Anfänger-Themen 7
L FileReader Java Basics - Anfänger-Themen 2
D Hilfe bei FileReader und BufferedReader Java Basics - Anfänger-Themen 2
Y Datei mit relativem Dateipfad per FileReader aus .JAR heraus auslesen Java Basics - Anfänger-Themen 4
A FileReader Problem Java Basics - Anfänger-Themen 14
D JFileChooser & FileReader Java Basics - Anfänger-Themen 4
L Input/Output FileReader Pfadangabe Java Basics - Anfänger-Themen 7
L While-Schleife und filereader Java Basics - Anfänger-Themen 5
F wo datei für filereader ablegen? Java Basics - Anfänger-Themen 11
M FileReader Zeilenangabe Java Basics - Anfänger-Themen 22
L RandomAcessFile getFilePointer in normalen FileReader Java Basics - Anfänger-Themen 4
H OOP FileReader Einleseergebnis Java Basics - Anfänger-Themen 5
R Von wo nimmt der FileReader seine daten Java Basics - Anfänger-Themen 7
J fileReader: wird dateipfad benötigt? Java Basics - Anfänger-Themen 8
Burny91 FileReader und Writer gleichzeitg nutzen Java Basics - Anfänger-Themen 2
F FileReader Frage Java Basics - Anfänger-Themen 3
M Frage zur Klasse FileReader Java Basics - Anfänger-Themen 6
G Character-orientierte File-Streams mit der Klasse FileReader Java Basics - Anfänger-Themen 5
Hamstinator Frage zu BufferedReader/FileReader Java Basics - Anfänger-Themen 4
F FileReader Methode Read() int? Java Basics - Anfänger-Themen 2
calzone FileReader, lesen ohne die Datei zu überschreiben? Java Basics - Anfänger-Themen 3
K FileReader Systempfad Mac Java Basics - Anfänger-Themen 11
hdi FileReader / BufferedReader langsam? Java Basics - Anfänger-Themen 3
A Filereader - An den Anfang des File springen Java Basics - Anfänger-Themen 2
N Pfad und FileReader? Java Basics - Anfänger-Themen 2
S Filereader funktioniert nicht! Fehlersuche Java Basics - Anfänger-Themen 9
K Problem mit .toString und FileReader Java Basics - Anfänger-Themen 2
G filereader Java Basics - Anfänger-Themen 5
G zusätzliche "" bei Pfadangabe z.B. bei FileReader Java Basics - Anfänger-Themen 2
H IOException bei FileReader Java Basics - Anfänger-Themen 3
P BufferedReader / FileReader Key und Values Java Basics - Anfänger-Themen 7
K FileReader BufferedReader & Arrays Java Basics - Anfänger-Themen 14
D Wie funktionieren FileReader Java Basics - Anfänger-Themen 6
M FileReader.read(char[]) - Größe des Arrays? Java Basics - Anfänger-Themen 4
R FileInputStream.read() != FileReader.read(). Pls Help Java Basics - Anfänger-Themen 5
S FileReader-Problem Java Basics - Anfänger-Themen 2
G Textdatei auslesen - Text anfügen - FileReader Java Basics - Anfänger-Themen 18
G FileReader Java Basics - Anfänger-Themen 10
P FileReader Java Basics - Anfänger-Themen 2
V filereader soll aus config.txt pfade lesen Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 4
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Anzeige

Neue Themen


Oben