Swing Filereader mit dem FileChecker

blumenpeter

Aktives Mitglied
Hallo Leute,

habe momentan ein kleines Problem mit meinem Filereader.
Ich habe eine GUI geschrieben, welche eine Datei einlesen soll, dann die Buchstaben
dieser Datei um einen bestimmten Key in der asci-Tabelle verschiebt und dann das Ergebnis wieder ausgeben soll.

Leider schaffe ich es nicht wirklich meine Methode "DateiLesen" mit dem sog. FileChecker zu verbinden.

Der FileChecker gibt mir die Möglichkeit, eine Datei auf meinem Rechner zu suchen und diese dann auszuwählen.
Meine Idee war/ist folgende:
Java:
    public void fileChecker(){

        int returnVal = chooser.showOpenDialog(p0);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            filename = chooser.getSelectedFile().getName();
        }
    }


    public void DateiLesen(){

        try{
            File meinDatei = new File(filename);
            FileReader fileReader = new FileReader(meinDatei);

            BufferedReader reader = new BufferedReader(fileReader);

            String zeile = null;

            while((zeile = reader.readLine()) != null) //Zeile soll die aktuelle zeile der Datei sein,
            {                                                    //funktioniert leider noch nicht (egal)
                System.out.println(zeile);
                if(x==2){
                    langerstring.append(asciRechnungplus(zeile));

                }
                if(x==1){
                    langerstring.append(asciRechnungminus(zeile));

                }
            }

            reader.close();
            ergebnislangerstring = langerstring.toString();//Hier mache ich aus den umgewandelten  
                                                                        //Chars wieder einen String den ich dann 
                                                                        //einfach wieder in eine Datei schreiben kann
            }
            catch(Exception ex){

                ex.printStackTrace();
            }

        }

leider funktioniert der Code nicht. Irgendwie kann meine DateiLesen Methode den "filenamen" nicht gebrauchen.

Hoffe mir kann wer helfen
Gruß!
 

eRaaaa

Top Contributor
Hast du dir denn mal filename ausgeben lassen?
Java:
 filename = chooser.getSelectedFile().getName();

An dieser Stelle "klemmst" du alle notwendigen Daten ab, bis auf den Dateinamen...und woher soll jetzt der FileReader/File(meineDatei) den Pfad kennen? Wenn du hinterher eh wieder ein File-Objekt erstellst, wieso deklarierst du "filename" nicht einfach als File anstelle von String und sagst einfach
Code:
filename = chooser.getSelectedFile();
(Zeile 13 dann raus)?
 

blumenpeter

Aktives Mitglied
Ah, okay danke,
das funktioniert jetzt soweit.

Habe aber leider immernoch nen Problem, wovon ich dachte, dass es evtl dieser "Fehler" war, aber leider besteht er immernoch.

Ich habe ja die Verschlüsselung gemeistert und der Text (bsp: ABC) wird mit einem Key auch verschlüsselt (Key1: BCD). Leider kann ich aber diesen Text nicht als neue textdatei speichern.

Java:
    StringBuffer langerstring;
    String ergebnislangerstring;


public void DateiLesen(){
 
        try{
            FileReader fileReader = new FileReader(filename);
            BufferedReader reader = new BufferedReader(fileReader);
 
            String zeile = null;
 
            while((zeile = reader.readLine()) != null) //Zeile soll die aktuelle zeile der Datei sein,
            {                                                    //funktioniert leider noch nicht (egal)
                System.out.println(zeile);
                if(x==2){
                    langerstring.append(asciRechnungplus(zeile));
 
                }
                if(x==1){
                    langerstring.append(asciRechnungminus(zeile));
 
                }
            }
 
            reader.close();
            ergebnislangerstring = langerstring.toString();//Hier mache ich aus den umgewandelten  
                                                                        //Chars wieder einen String den ich dann 
                                                                        //einfach wieder in eine Datei schreiben kann
            }
            catch(Exception ex){
 
                ex.printStackTrace();
            }
 
        }

public String asciRechnungplus(String s){           //Hier wird die verschlüsselung ausgeführt(Zeile 15 & 19)
    
        StringBuffer ergebnis = new StringBuffer();

        for(int i=0;i<s.length();i++)
        {
            int c  = s.charAt(i);
            c =  c + key;
            System.out.println("Code : "+ ergebnis.append((char)c));
            
        }



    public void DateiErstellen(){  // Hier wird eine neue Textdatei erstellt ZEILE 25

           try{

           FileWriter writer = new FileWriter("verschluesselung.txt");

            writer.write(ergebnislangerstring);

            writer.close();


        }
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Okay, allgemein ists jetzt schwer bei so einem nicht vollständigen Code den Fehler zu finden, du scheinst ja nur einige Zeilen per copy&paste eingefügt zu haben...
Denn z.B.
- StringBuffer langerstring; wird nirgends instanziiert(hast du das weggelassen hier?)
- die Methode asciRechnungplus gibt gar nichts zurück? (fehlt hier das return ergebnis.toString(); ) ?
- wo wird DateiErstellen denn aufgerufen
usw.

Am Besten du machst mal ein kleines/kurzes Beispiel das man kompilieren und testen kann! Vllt siehst du dadurch ja schon selbst den Fehler....

An sich siehts sonst eig. "funktionstüchtig" aus meiner Meinung :D
 

blumenpeter

Aktives Mitglied
Hi, hatte leider wirklich was vergessen, sorry!

Also:
damit ich das Programm starten kann, muss ich erstmal einen Key eingeben, ist dieses gemacht, muss ich dann die Radiobutton auswählen, also ver- oder entschlüsseln, anschließend kann ich eine Datei auswählen, bei der die "Radiobuttonaktion" ausgeführt wird.
Nun Drückt man auf Start und der Programm soll in das Programmverzeichnis eine Datei namens "verschluesselung.txt"(entschlüsselung habe ich noch nicht geschrieben dafür werde ich aber die x variable der Radiobutton benutzen) erstellen.

Java:
public class grundgerüstswing implements ActionListener{

File filename;
int key=0;
int x=0;
StringBuffer sb1;
StringBuffer langerstring;
String ergebnislangerstring;


public grundgerüstswing(){

//Hier wird meine Ganze GUI geladen

}

public String asciRechnungplus(String s){  // zum Verschlüsseln
    
        StringBuffer ergebnis = new StringBuffer();

        for(int i=0;i<s.length();i++)
        {
            int c  = s.charAt(i);
            c =  c + key;
            System.out.println("Code : "+ ergebnis.append((char)c));
            //b3.setEnabled(true);

        }


        return ergebnis.toString();
    }

public String asciRechnungminus(String s){  // zum Entschlüsseln

        StringBuffer ergebnis = new StringBuffer();

        for(int i=0;i<=s.length();i++)
        {
            int c  = s.charAt(i);
            c =  c - key;
            System.out.println("Code : "+ ergebnis.append((char)c));
            //b3.setEnabled(true);

        }


        return ergebnis.toString();
    }
    public void DateiErstellen(){    //Hier wird die Datei geschrieben

           try{

           FileWriter writer = new FileWriter("verschluesselung.txt");

            writer.write(ergebnislangerstring);

            writer.close();


        }

        catch(IOException ex){

           ex.printStackTrace();
        }

    }

    public void DateiLesen(){     // Hier wird die Datei gelesen

        try{
            FileReader fileReader = new FileReader(filename);
            BufferedReader reader = new BufferedReader(fileReader);

            String zeile = null;

            while((zeile = reader.readLine()) != null)
            {
                System.out.println(zeile);
                if(x==2){
                langerstring.append(asciRechnungplus(zeile));

                }
                if(x==1){
                langerstring.append(asciRechnungminus(zeile));

                }
            }

            reader.close();
            ergebnislangerstring = langerstring.toString();
            DateiErstellen();

            }
            catch(Exception ex){

                ex.printStackTrace();
            }

        }

    public void fileChecker(){

        int returnVal = chooser.showOpenDialog(p0);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            filename = chooser.getSelectedFile();

        }
    }

    public void actionPerformed(ActionEvent ev) {
    
        try{
            if(ev.getSource()== b1){  // mein Dateisuche Button

                fileChecker();
                l1.setText(chooser.getSelectedFile().getName());

                
                b3.setEnabled(true);
            }
        }
        catch(Exception e){

        }

        try{
            if(ev.getSource()== b2){  //mein Key-EingabeButton

                for(int i=0;i<10;i++){
                    
                    key = Integer.parseInt(JOptionPane.showInputDialog("Key/Schlüssel",""));
                    if(key == 0){
                        key = Integer.parseInt(JOptionPane.showInputDialog("Key/Schlüssel",""));
                    }
                    else{
                        i=10;
                    }
                }
                rb1.setEnabled(true);
                rb2.setEnabled(true);
            }
        }
        catch(Exception e){

        }

        try{
            if(ev.getSource()== b5){  // ein Ende Button
                System.exit(1);
            }
        }
        catch(Exception e){

        }        
        
        try{
            if(ev.getSource()== b3){   //Hier wird in der GUI dann die "Aktion gestartet" START
                DateiLesen();
            }
        }
        catch(Exception e){

        }

        try{
            if(ev.getSource()== rb1){  // RadioButton 1 Entschlüsseln 
                b1.setEnabled(true);
                x=1;


            }
        }
        catch(Exception e){

        }
        try{
            if(ev.getSource()== rb2){ // RadioButton 2 Verschlüsseln 
                b1.setEnabled(true);
                x=2;
                
            }
        }
        catch(Exception e){

        }

    }


}
 

eRaaaa

Top Contributor
Naja, so richtig nachvollziehen kann mans(ich) immer noch nicht.
Aber was ist jetzt überhaupt genau der Fehler? Es wird keine Datei erstellt oder wie(daran denken dass du dort wieder keinen Pfad angegeben hast!!!)? Oder mit falschem/keinem Inhalt?
Also an sich ist ja an diesem Code hier nichts besonderes dabei:
Java:
  public void DateiErstellen(){    //Hier wird die Datei geschrieben
 
           try{
 
           FileWriter writer = new FileWriter("verschluesselung.txt");
 
            writer.write(ergebnislangerstring);
 
            writer.close();
 
 
        }
 
        catch(IOException ex){
 
           ex.printStackTrace();
        }
 
    }

Was du halt machen könntest ist a) sicherstellen dass die Methode aufgerufen wird(Debugger oder mal schnell System.outs)...dann solltest du dir an dieser Stelle auch mal den String "ergebnislangerstring" anschauen...ansonsten wüsste ich jetzt auch nicht..da ist ja wirklich nicht viel dran an dem Code :)
 

blumenpeter

Aktives Mitglied
Hi, also scheinbar kommt er gar nicht bis zum schreiben der Datei.
Mir werden ein haufen Fehler angezeigt, aber verschlüsseln kann er scheinbar, denn in der Textdatei die ich einlese steht: "ABC" und als System.out.print bekomme ich BCD.

Einen Pfad muss ich doch zwangsläufig nicht eingeben, oder?
Dachte wenn man nichts angibt, dann wird die Datei im Programmverzeichnis gespeichert

Hier meine Fehlermeldung, die mir nix sagt:

run:
abc
Code : b
java.lang.NullPointerException
Code : bc
Code : bcd
at verschlüsselung20.grundgerüstswing.DateiLesen(grundgerüstswing.java:236)
at verschlüsselung20.grundgerüstswing.actionPerformed(grundgerüstswing.java:314)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Java:
package verschlüsselung20;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 *
 * @author blumenpeter
 */
public class grundgerüstswing implements ActionListener{

    JFrame frame1;
    JPanel p0,p1,p2,p3,p4,p5,p6;
    JButton b1,b2,b3,b4,b5,b6;
    JTextArea ta1;
    JTextField tf1;
    JLabel l1;
    JScrollPane scroller1;
    JCheckBox box1,box2;
    JFileChooser chooser;
    File filename;
    int key=0;
    JRadioButton rb1,rb2;
    int x=0;

    StringBuffer sb1;
    File textvari;
    StringBuffer langerstring;
    String ergebnislangerstring;



    public grundgerüstswing(){


        ButtonGroup buttonGroup = new ButtonGroup();

        frame1 = new JFrame();
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setBackground(Color.WHITE);

        p0 = new JPanel();
        p0.setBackground(Color.WHITE);
        p0.setLayout(new GridLayout(4,0));

        p1 = new JPanel();
        p1.setBackground(Color.WHITE);
        p1.setLayout(new FlowLayout());

        p2 = new JPanel();
        p2.setBackground(Color.WHITE);
        p2.setLayout(new BoxLayout(p2, BoxLayout.Y_AXIS));

        p3 = new JPanel();
        p3.setBackground(Color.WHITE);
        p3.setLayout(new GridLayout(2,2));

        p4 = new JPanel();
        p4.setBackground(Color.WHITE);
        p4.setLayout(new FlowLayout());

        p5 = new JPanel();
        p5.setBackground(Color.WHITE);
        p5.setLayout(new FlowLayout());

        chooser = new JFileChooser();
        b1 = new JButton("Datei Öffnen");
        b1.setAlignmentX(JButton.CENTER_ALIGNMENT);
        b1.setVisible(true);
        b1.setEnabled(false);

        b2 = new JButton("KEY");
        b2.setAlignmentX(JButton.CENTER_ALIGNMENT);
        b2.setVisible(true);

        b3 = new JButton("STARTEN");
        b3.setAlignmentX(JButton.CENTER_ALIGNMENT);
        b3.setVisible(true);
        b3.setEnabled(false);

        b4 = new JButton("HILFE - ? -");
        b4.setAlignmentX(JButton.CENTER_ALIGNMENT);
        b4.setVisible(true);

        b5 = new JButton("ENDE");
        b5.setAlignmentX(JButton.CENTER_ALIGNMENT);
        b5.setVisible(true);

        box1 = new JCheckBox("Entschlüsseln");
        box1.setVisible(true);
        box2 = new JCheckBox("Verschlüsseln");
        box2.setVisible(true);
        
        rb1 = new JRadioButton("Entschlüsseln");
        rb1.setVisible(true);
        rb1.setEnabled(false);
        rb2 = new JRadioButton("Verschlüsseln");
        rb2.setVisible(true);
        rb2.setEnabled(false);
        
        buttonGroup.add(rb1);
        buttonGroup.add(rb2);

        ta1 = new JTextArea(""+"\n"+"");
        ta1.setSize(100, 50);
        ta1.setVisible(true);

        l1 = new JLabel("Kein Datei ausgewählt!!");
        l1.setVisible(true);

        //Listener aktion
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);
        b5.addActionListener(this);
        rb1.addActionListener(this);
        rb2.addActionListener(this);


        p0.add(p1);
        p0.add(p3);
        p1.add(b1);
        p1.add(p2);
        p2.add(l1);
        p3.add(rb1);
        p3.add(b2);
        p3.add(rb2);
        p3.add(b3);
        p0.add(p4);
        p4.add(b4);
        p4.add(b5);
        p0.add(p5);
        p5.add(ta1);

        frame1.add(p0);
        frame1.getContentPane().add(BorderLayout.CENTER, p0);
        frame1.setSize(350, 177);
        frame1.setVisible(true);

    }

    public String asciRechnungplus(String s){
    
        StringBuffer ergebnis = new StringBuffer();

        for(int i=0;i<s.length();i++)
        {
            int c  = s.charAt(i);
            c =  c + key;
            System.out.println("Code : "+ ergebnis.append((char)c));
            //b3.setEnabled(true);

        }


        return ergebnis.toString();
    }

    public String asciRechnungminus(String s){

        StringBuffer ergebnis = new StringBuffer();

        for(int i=0;i<=s.length();i++)
        {
            int c  = s.charAt(i);
            c =  c - key;
            System.out.println("Code : "+ ergebnis.append((char)c));
            //b3.setEnabled(true);

        }


        return ergebnis.toString();
    }
    public void DateiErstellen(){

           try{

           FileWriter writer = new FileWriter("verschluesselung.txt");

           System.out.println(ergebnislangerstring +"ddddddddddddddddddddd");
            writer.write(ergebnislangerstring);

            writer.close();


        }

        catch(IOException ex){

           ex.printStackTrace();
        }

    }

    public void DateiLesen(){

        try{
            FileReader fileReader = new FileReader(filename);
            BufferedReader reader = new BufferedReader(fileReader);

            String zeile = null;

            while((zeile = reader.readLine()) != null)
            {
                System.out.println(zeile);
                if(x==2){
                langerstring.append(asciRechnungplus(zeile));

                }
                if(x==1){
                langerstring.append(asciRechnungminus(zeile));

                }
            }

            reader.close();
            ergebnislangerstring = langerstring.toString();
            DateiErstellen();

            }
            catch(Exception ex){

                ex.printStackTrace();
            }

        }

    public void fileChecker(){

        int returnVal = chooser.showOpenDialog(p0);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            filename = chooser.getSelectedFile();

        }
    }

    public void actionPerformed(ActionEvent ev) {
    
        try{
            if(ev.getSource()== b1){

                fileChecker();
                l1.setText(chooser.getSelectedFile().getName());

                
                b3.setEnabled(true);
            }
        }
        catch(Exception e){

        }

        try{
            if(ev.getSource()== b2){

                for(int i=0;i<10;i++){
                    
                    key = Integer.parseInt(JOptionPane.showInputDialog("Key/Schlüssel",""));
                    if(key == 0){
                        key = Integer.parseInt(JOptionPane.showInputDialog("Key/Schlüssel",""));
                    }
                    else{
                        i=10;
                    }
                }
                rb1.setEnabled(true);
                rb2.setEnabled(true);
            }
        }
        catch(Exception e){

        }

        try{
            if(ev.getSource()== b5){
                System.exit(1);
            }
        }
        catch(Exception e){

        }        
        
        try{
            if(ev.getSource()== b3){
                DateiLesen();
            }
        }
        catch(Exception e){

        }

        try{
            if(ev.getSource()== rb1){
                b1.setEnabled(true);
                x=1;


            }
        }
        catch(Exception e){

        }
        try{
            if(ev.getSource()== rb2){
                b1.setEnabled(true);
                x=2;
                
            }
        }
        catch(Exception e){

        }

    }


}
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben