Text Datei einlesen und übertragen

pureGewalt

Mitglied
Guten Tag zusammen,

ich brauche Hilfe beim verstehen einer Aufgabe. Und zwar soll ich ein Programm schreiben das Argumente entgegenimmt, die einen Pfad zu einer Textdatei geben soll, diese soll dann verschlüsselt werden, und in einen Zielpfad kommen. (Verschlüsselung wird über Ceasar alg. laufen) (Aber soweit bin ich noch nicht) Ich möchte jetzt erst mal verstehen wie ich eine Textdatei von einem Pfad in einen anderen übertrage. Außerdem soll noch eine zahl zwischen 0 und 25 entgegen genommen werden für die verschiebung( schätze das hat aber was mit der verschlüsselung zu tun).

hier schon einmal kleiner anfang

Code:
import java.io.*;

public class InterneKommunikation {

    public static void main(String[] args) throws IOException {
        File datei = new File("c:\\Uebung_Java\\fileTest.txt");
        FileReader eingabeStrom = new FileReader(datei);
        BufferedReader eingabe = new BufferedReader(eingabeStrom);
        
    }

}

Soweit ich das verstanden habe sollte das so in etwa gehen können. Sprich ich speichere die Text datei in einer Variable, am besten schreibe ich jetzt eine Methode, in der ich die Variable übergebe diese dann verschlüsse und in einem neuen Pfad zurückgebe?

Danke im vorraus.

Herzliche Grüße
 
K

kneitzel

Gast
Also generelle Herangehensweise ist aus meiner Sicht:
Ist es notwendig, die ganze Datei auf einmal zu lesen? Das kann halt bei großen Dateien problematisch sein...

Die Verschlüsselung ist aber Zeichen basiert, d.h. ein Zeichen wird durch ein anderes ersetzt. (https://de.wikipedia.org/wiki/Caesar-Verschlüsselung) Also besteht keine Notwendigkeit, die Datei als ganzes einzulesen. Der Übliche Weg ist also etwas wie:
- Öffne die Source Datei zum Lesen
- Öffne die Ziel Datei zum Schreiben
- Solange Du eine Zeile lesen kannst:
---> Verschlüssel die Zeile
---> Schreibe das Ergebnis der Verschlüsselung in die Ziel Datei
- Schließe beide Dateien.
 

pureGewalt

Mitglied
Danke für deine Antwort! Leider verstehe ich noch nicht wie ich die Source Datei lese, und dann eine Ziel Datei öffne. Da werde ich mich nochmal einlesen müssen, es fällt mir schwer zu entscheiden was man dann für schlüssewörter benutzt.

Ergänzung:

Code:
FileReader fr = new FileReader("c:\\Uebung_Java\\fileTest.txt");
        BufferedReader br = new BufferedReader(fr);
        
        String ausgabe = br.readLine();
        System.out.println(ausgabe);

So kann ich mir den Text aus der Datei ausgeben lassen.
 
K

kneitzel

Gast
Du hast den Code doch schon fast fertig. Du hast den BufferedReader auf einem FileReader erzeugt zum öffnen der Datei:
Java:
    FileReader fileReader = new FileReader("infile.txt");
    BufferedReader reader = new BufferedReader(fileReader);
#

Zum Schreiben ist fast das Gleiche, nur eben wird "Reader" durch "Writer" ersetzt...

Das lesen von Zeilen kannst Du nun über reader.readLine() machen. Dieser Aufruf gibt am Ende null aus, so dass wird dies prüfen. Lesen (mit Zuweisung in eine Variable) kann nun über etwas wie folgt gemacht werden:
Java:
String line;
while ((line = reader.readLine()) != null) {
  // Do something ...
}

Das Du Something ist dann halt das verschlüsseln der Zeile sowie das schreiben in den BufferedWriter.

Und nach der Schleife werden die BufferedReader/BufferedWriter noch geschlossen mit close() Aufrufen.
 

pureGewalt

Mitglied
Ja und wenn ich das so mache dann gehe ich auch in einen Pfad der verschlüsselt werden soll? In einen Zielpfad wo die verschlüsselete datei dann sein soll?
Code:
public static void main(String[] args) throws IOException {
       
        FileReader filereader = new FileReader("c:\\Uebung_Java\\fileTest.txt");
        BufferedReader reader = new BufferedReader(filereader);
       
       
        FileWriter filewriter = new FileWriter("c:\\Uebung_Java\\fileTest.txt");
        BufferedReader writer = new BufferedReader(filerwriter);
       
   
        String linie;
        while(linie = reader.readLine() != null) {
           
            //Abfrage um wieviele Stellen verschoben werden soll 0-25
           
            //Cäsar verschlüsselung
           
        }
       
        //Ausgabe der Verschlüsselung
        //Reader und Writer schließen
   
    }

Wäre der Aufbau Korrekt?
 
K

kneitzel

Gast
Nein, der Aufbau ist nicht ganz korrekt. Folgende Dinge fallen mir auf:
- Ein- und Ausgabe sollten natürlich unterschiedliche Dateien sein. So wird es nicht funktionieren, da die Datei ja erst zum Lesen geöffnet wird und dann kann man die Datei nicht mehr zum Schreiben öffnen, da durch das Öffnen zum Lesen das Betriebssystem die Datei sperrt.
- Die Abfrage, um wie viele Stellen verschoben werden soll, muss einmalig vor der Schleife erfolgen. Du willst ja nicht für jede Zeile einen neuen Wert eingeben.
 

pureGewalt

Mitglied
Nein, der Aufbau ist nicht ganz korrekt. Folgende Dinge fallen mir auf:
- Ein- und Ausgabe sollten natürlich unterschiedliche Dateien sein. So wird es nicht funktionieren, da die Datei ja erst zum Lesen geöffnet wird und dann kann man die Datei nicht mehr zum Schreiben öffnen, da durch das Öffnen zum Lesen das Betriebssystem die Datei sperrt.
- Die Abfrage, um wie viele Stellen verschoben werden soll, muss einmalig vor der Schleife erfolgen. Du willst ja nicht für jede Zeile einen neuen Wert eingeben.

Danke für die Antwort! Ich bin mir gerade nicht 100% Sicher ob wir dasselbe meinen :eek: . Und zwar möchte ich ja eine Datei vom Desktop z.b. irgendein Textdokument, dort steht z.b. drin "Hallo Wie gehts" und diese Datei soll verschlüsselt werden und in einem Zielpfad gespeichert werden.
 
K

kneitzel

Gast
Ja genau. Das habe ich ja schon verstanden. Aber den Aufbau hast Du noch nicht ganz verstanden fürchte ich.

Aber Du kannst es ja mal ausprobieren. Du kannst ja auf das Verschlüsseln noch verzichten indem Du einfach eine Funktion schreibst, die den String unverschlüsselt zurück gibt.

Und dann testest Du es aber bitte mit einer Datei mit mehr als einer Zeile, also z.B. eine Datei wie:
Dies ist Zeile 1.
Und noch eine zweite Zeile!

Und dann schaust du einfach, was passiert und ob es genau das ist, was du haben möchtest.
 

pureGewalt

Mitglied
Ja genau. Das habe ich ja schon verstanden. Aber den Aufbau hast Du noch nicht ganz verstanden fürchte ich.

Aber Du kannst es ja mal ausprobieren. Du kannst ja auf das Verschlüsseln noch verzichten indem Du einfach eine Funktion schreibst, die den String unverschlüsselt zurück gibt.

Und dann testest Du es aber bitte mit einer Datei mit mehr als einer Zeile, also z.B. eine Datei wie:
Dies ist Zeile 1.
Und noch eine zweite Zeile!

Und dann schaust du einfach, was passiert und ob es genau das ist, was du haben möchtest.

Ok habe ich jetzt gemacht:

Code:
public static void main(String[] args) throws IOException {

        FileReader fileReader = new FileReader("C:\\Uebung_Java\\fileTest.txt");
        BufferedReader reader = new BufferedReader(fileReader);
        
        //Deklaration
        textLesen(fileReader, reader);
        
    }

    // Methoden
    
    public static String textLesen(FileReader fileReader, BufferedReader reader) throws IOException {
        
        String line;
        
        while((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        return line;
    
    }

Wie speichere ich das dann in einem Ziel Pfad? Ich denke mal in der Methode "textLesen" könnte ich das Verschlüsseln noch mit reinpacken. Zumindest das er das Verschlüsselte zurückgibt.
 
K

kneitzel

Gast
Also die Funktion textLesen wird immer null zurück geben, das ist Dir klar?

Die Idee, die ich ursprünglich aufgebracht habe, war ja: Zum verschlüsseln lädst Du die Datei immer nur Zeile für Zeile und verarbeitest dann die Zeile direkt in der while Schleife.

Aber falls Du das nicht mehr so machen willst, dann kannst Du natürlich auch umsatteln und die immer eine Datei komplett lesen und zurück geben. Aber dann funktioniert es ggf. nicht mehr für große Dateien.
 

pureGewalt

Mitglied
Also die Funktion textLesen wird immer null zurück geben, das ist Dir klar?

Die Idee, die ich ursprünglich aufgebracht habe, war ja: Zum verschlüsseln lädst Du die Datei immer nur Zeile für Zeile und verarbeitest dann die Zeile direkt in der while Schleife.

Aber falls Du das nicht mehr so machen willst, dann kannst Du natürlich auch umsatteln und die immer eine Datei komplett lesen und zurück geben. Aber dann funktioniert es ggf. nicht mehr für große Dateien.

Warum wird Sie immer Null zurückgeben? Bei mir ist die Ausgabe das was in der Textdatei steht. Was meinen Sie genau damit ? :)

Ok dann müssen wir Ihre Idee nehmen denn meine Aufgabenstellung besagt das "man mit beliebig großen Dateien umgehen können soll und wenn bereits eine Datei im Zielpfad exisitert soll Sie ersetzt werden"

Also wieder von Anfang..
Also ich möchte eine Methode der ich die Textdatei übergebe diese dann Zeile um Zeile verarbeitet oder wie? Und diese Zeile gebe ich in eine While schleife in der es verschlüsselt wird und dieses "verschlüsselte" gebe ich dann zurück und speicher es in einem neuen Pfad?
 
K

kneitzel

Gast
Also die Funktion gibt mit System.out.println Zeile für Zeile aus.
Wenn line null ist, wird die While-Schleife verlassen und line als Rückgabewert zurück gegeben.

Du siehst nur die Ausgabe, denn Du rufst die Funktion ja auf, ohne mit dem Rückgabewert irgendwas zu machen.

Und in #4 hast Du ja schon fast alles. Du musst da, wo die Datei zum Lesen geöffnet wird nur noch eine Datei zum schreiben öffnen. Und der Do Something Kommentar muss ersetzt werden mit dem Verschlüsseln der Zeile und dem Schreiben des Strings in der Zieldatei.
 

pureGewalt

Mitglied
Also die Funktion gibt mit System.out.println Zeile für Zeile aus.
Wenn line null ist, wird die While-Schleife verlassen und line als Rückgabewert zurück gegeben.

Du siehst nur die Ausgabe, denn Du rufst die Funktion ja auf, ohne mit dem Rückgabewert irgendwas zu machen.

Und in #4 hast Du ja schon fast alles. Du musst da, wo die Datei zum Lesen geöffnet wird nur noch eine Datei zum schreiben öffnen. Und der Do Something Kommentar muss ersetzt werden mit dem Verschlüsseln der Zeile und dem Schreiben des Strings in der Zieldatei.

Danke für deine Hilfe.

Ich habe es jetzt weiter versucht, komme aber nicht drauf wie ich den Writer richtig verwende, habe jetzt erstmal einfach nur verschlüsselt irgendwie. Aber ist auf jeden Fall immer noch falsch.

Code:
public static void main(String[] args) throws IOException {

        FileReader fileReader = new FileReader("c:\\Uebung_Java\\startDatei.txt");
        BufferedReader reader = new BufferedReader(fileReader);

        FileWriter fileWriter = new FileWriter("c:\\Uebung_Java\\zielDatei.txt");
        BufferedWriter writer = new BufferedWriter(fileWriter);

        String zeile;
        String zielZeile = "";
        String zielDateiString = "";

        while ((zeile = reader.readLine()) != null) {
            for(int i = 0; i <= zeile.length(); i++) {
                char tmp = zeile.charAt(i);
                zielDateiString += (char) (tmp + 3);
                zielZeile = zielDateiString;
            }
        }
        System.out.println(zielZeile);
        
    }
 
K

kneitzel

Gast
Du hast ja schon einen BufferedWriter erstellt. Daher könnte man sich die Klasse einmal ansehen, was man da so aufrufen kann:

Da dürfte write(String s, int off, int len) zielführend sein. Und newLine() könnte man nutzen um einen Zeilenumbruch zu schreiben.

Bezüglich der Verschlüsselung sehe ich zwei Dinge als wichtig an:
a) Wenn es zu einet Art "Overflow" kommt durch die + Operation, dann geht es von vorne los. Also nach "Z" kommt wieder "A".
b) Wenn Zeichen vorkommen, die nicht im Alphabet definiert sind, dan müsste man überlegen was man da dann ausgibt. Da die Menge der erlaubten Zeichen auf die Menge der erlaubten Zeichen abgebildet wird, könnte man hier die "ungültigen" Zeichen einfach 1:1 weitergeben.
 

pureGewalt

Mitglied
Du hast ja schon einen BufferedWriter erstellt. Daher könnte man sich die Klasse einmal ansehen, was man da so aufrufen kann:

Da dürfte write(String s, int off, int len) zielführend sein. Und newLine() könnte man nutzen um einen Zeilenumbruch zu schreiben.

Bezüglich der Verschlüsselung sehe ich zwei Dinge als wichtig an:
a) Wenn es zu einet Art "Overflow" kommt durch die + Operation, dann geht es von vorne los. Also nach "Z" kommt wieder "A".
b) Wenn Zeichen vorkommen, die nicht im Alphabet definiert sind, dan müsste man überlegen was man da dann ausgibt. Da die Menge der erlaubten Zeichen auf die Menge der erlaubten Zeichen abgebildet wird, könnte man hier die "ungültigen" Zeichen einfach 1:1 weitergeben.

Vielen Dank für deine Hilfe! Aber ich bin noch so neu in dem Gebiet das ich es teilweise echt nicht verstehe was ich da machen soll. Ich denke ich werde erst einmal mich nochmal gescheit einlesen in das Thema.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
J Text Datei einlesen Java Basics - Anfänger-Themen 6
I BufferedReader Text-Datei einlesen??? Java Basics - Anfänger-Themen 1
S Datenströne - Text in eine Datei einlesen, umwandeln und in eine neue Datei schreiben Java Basics - Anfänger-Themen 6
Z Text aus externer Datei in TextArea einlesen Java Basics - Anfänger-Themen 5
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
M Text in Datei schreiben Java Basics - Anfänger-Themen 9
T208 Text Datei individuell benennen. Java Basics - Anfänger-Themen 5
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
M Java: BufferedReader liest nur die Hälfte der Text-Datei. Java Basics - Anfänger-Themen 4
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
L Java Text datei nur bis zu einem Punkt auslesen? Java Basics - Anfänger-Themen 3
S Erste Schritte Sprachermittler - Datei öffnen, Text in TextArea, Bereinigen, Auswerten Java Basics - Anfänger-Themen 14
T csv datei in text datei speichern Java Basics - Anfänger-Themen 3
S aus Text Datei Instanzen erzeugen, so richtig? Java Basics - Anfänger-Themen 4
H Text Datei öffnen Java Basics - Anfänger-Themen 7
E Text Datei Daten Auslesen und Schreiben Java Basics - Anfänger-Themen 3
R Array in Text Datei schreiben Java Basics - Anfänger-Themen 2
C Text-Datei fortsetzen Java Basics - Anfänger-Themen 10
Strahlungsleck Input/Output Zahlen aus Text-Datei auslesen Java Basics - Anfänger-Themen 6
B Änderung an Text-Datei Java Basics - Anfänger-Themen 5
R Text in Datei finden Java Basics - Anfänger-Themen 2
P mit java text-datei auslesen und weiter bearbeiten Java Basics - Anfänger-Themen 3
S Text aus HTML Datei in TXT Datei Java Basics - Anfänger-Themen 19
K Ein text Datei komplet ausgeben lassen. Java Basics - Anfänger-Themen 2
K Text aus einem Datei lesen , und im JTextArea ausgeben. Java Basics - Anfänger-Themen 3
K Daten in eine Text datei schreiben !!!! Java Basics - Anfänger-Themen 6
W .jar datei liest text datei nicht Java Basics - Anfänger-Themen 11
W Objecte in (Text)Datei speichern Java Basics - Anfänger-Themen 3
bambi0815 Text Datei Stream to Char[][] Java Basics - Anfänger-Themen 7
M HTML Datei als Text rausspeichern Java Basics - Anfänger-Themen 3
W Strings in Text-Datei schreiben Java Basics - Anfänger-Themen 5
J An das Ende einer Datei Text anhängen Java Basics - Anfänger-Themen 2
H Objekte aus Text-Datei wieder in ArrayList laden Java Basics - Anfänger-Themen 8
O Text von Homepage via Java auslesen und in Text Datei speich Java Basics - Anfänger-Themen 1
D Auf einem USB-Stick gespeicherte Text-Datei öffnen Java Basics - Anfänger-Themen 11
M bunter text in datei schreiben Java Basics - Anfänger-Themen 6
L Eclipse text datei schreiben! Java Basics - Anfänger-Themen 3
S Text datei auslesen Java Basics - Anfänger-Themen 20
P Text vor und nach dem Inhalt einer Datei einfügen Java Basics - Anfänger-Themen 3
T Text in Datei schreiben Java Basics - Anfänger-Themen 4
K Text von Eingabefeld in eine txt Datei speichern Java Basics - Anfänger-Themen 2
roflomfg Text in eine lokale "*.txt-Datei" speichern Java Basics - Anfänger-Themen 9
G zeilen aus text datei löschen Java Basics - Anfänger-Themen 6
ARadauer zeilen einer text datei ermitteln Java Basics - Anfänger-Themen 6
P jar programm zeigt den text eingelesen aus datei nicht an Java Basics - Anfänger-Themen 3
L Ist eine Datei binary oder text encoded Java Basics - Anfänger-Themen 8
F Drucken einer Text Datei Java Basics - Anfänger-Themen 2
F text datei weiterschreiben Java Basics - Anfänger-Themen 8
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
D Text aus JTextField in *.txt Datei Grundlage Java Basics - Anfänger-Themen 4
E text in datei Java Basics - Anfänger-Themen 4
D Datei - Text einfügen Java Basics - Anfänger-Themen 2
D Text-Datei(en) mit der Methode read(bytes[] b) auslesen Java Basics - Anfänger-Themen 4
R Url aus einer Text Datei auslesen. Java Basics - Anfänger-Themen 4
T Text an Datei anhängen Java Basics - Anfänger-Themen 4
M Text-Datei in einem Package ausgeben lassen Java Basics - Anfänger-Themen 4
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
A Edit Text Negative Decimalzahlen Java Basics - Anfänger-Themen 18
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
R Text in der DB abspeichern, und danach bearbeiten Java Basics - Anfänger-Themen 5
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
JavaBeginner22 Button Text verändern Java Basics - Anfänger-Themen 1
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
A Text zu Morsecode Java Basics - Anfänger-Themen 8
O Java Text Area Zeilenausgabe Java Basics - Anfänger-Themen 7
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
A Werten aus dem Text ausliesten Java Basics - Anfänger-Themen 6
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
xFlozen Text mehrspaltig ausgeben Java Basics - Anfänger-Themen 3
K Rekursiver Vergleich von Textmuster und Text Java Basics - Anfänger-Themen 2
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
H Klassen Die Länge einer Text-Node bestimmen Java Basics - Anfänger-Themen 2
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
J Java TextArea Text bei hinzufügen makieren Java Basics - Anfänger-Themen 1
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Anklickbaren Text erzeugen Java Basics - Anfänger-Themen 2
M Apache POI PPT - Vertikales Alignment von Text im XSLFAutoShape Java Basics - Anfänger-Themen 2
P Taschenrechner Text übertragung Java Basics - Anfänger-Themen 3
J java.text.DecimalFormat Java Basics - Anfänger-Themen 5
AnnaBauer21 GridBagLayout JLabel weightx: Unterschiedliche Breite mit & ohne Text Java Basics - Anfänger-Themen 6
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
S Text-To-Speech mit Java Java Basics - Anfänger-Themen 2
L Text-Adventure Java Basics - Anfänger-Themen 3
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
ruutaiokwu Ausgegebene Zeile ersetzen mit neuem Text Java Basics - Anfänger-Themen 3
tsom Erste Schritte itext Text als Block auf neue Seite Java Basics - Anfänger-Themen 0
Dimax Programme ,als Text in MySql speichern Java Basics - Anfänger-Themen 7
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
Harlequin Compiler-Fehler Text Adventure - "Long Output" Fehler Java Basics - Anfänger-Themen 3
S Zeichen zählen kopierter Text Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben