Text-Datei erstellen, speichern und wieder ausgeben

diaspora

Grünschnabel
Hallo zusammen,

Ich bin ein Anfänger in Java und hoffe deswegen Ihr könnt mir helfen.

Mein Entwicklungsumgebung ist NetBeans IDE 5.5 und ich möchte ein kleines Programm erstellen, dass mir aus einem JArea-Textfeld ein Wort einliest und dann dieses Wort als oder in einer .TXT-Datei auf meinem Desktop abgespeichert.

Natürlich ist das nicht alles was das Programm machen soll aber ich wäre euch sehr dankbar, wenn Ihr mir den Code für diesen Teil geben könntet, da ich dann darauf aufbauen und mein Programm danach noch weiter ausbauen kann.

Naja, mein sehr bescheidener Zwischenstand in der GUI sieht wie folgt aus:
Code:
/*
 * NewJFrame.java
 *
 * Created on 2. Juli 2007, 23:01
 */

package javaapplication5;

/**
 *
 * @author  diaspora
 */
public class NewJFrame extends javax.swing.JFrame {
    
    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jTextArea1.setText("Bitte hier eingeben");
        jScrollPane1.setViewportView(jTextArea1);

        jButton1.setText("speichern");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                alsTXTspeichern(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(30, 30, 30)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jButton1)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(192, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(43, 43, 43)
                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jButton1)
                .addContainerGap(114, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>

   private void alsTXTspeichern(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
    }    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration
    
}

Kann mir vielleicht jemand dabei helfen?

Gruß
Diaspora
 
Hallo,

ich glaube kaum, dass dir jemand helfen wird, wenn du direkt nach dem Code fragst und man nicht sieht, dass du dir selbst mal gedanken gemacht hast, vor allem wenn der Code den du gepostet hast, sehr danach aussieht, dass du diesen nur mit einem GUI-Builder zusammen geklickt hast.

Das hier wird dir weiter helfen.
http://www.galileocomputing.de/open...12_003.htm#mjb0761d0e5d87216c7da94eccb4ec6623

Ich bin mir auch ziemlich sicher, wenn du weitere Fragen hast, du auch eine Lösung hier finden wirst.

MFG

zEriX
 
Hallo,

ich habe das Programm jetzt soweit hinbekommen wie ich es haben wollte:

Einlesen eines Strings im Command-Fenster-> speichern als Inhalt in einer Texdatei->Öffnen einer Textdatei mit Ausgabe des Inhalts und->Möglichkeit der Ver-/Entschlüsselung

Ich habe das ganze Programm aber prozedural und nicht objektorientiert geschrieben.
das soll eine große Sünde sein, wenn man Programme in Java schreibt :eek:

Aus diesem Grund wollte ich es jetzt nachträglich objektorientiert machen und die Ver-/Entschlüsselungsfunktionen in eine Extra-Klasse packen.

Irgendwie stimmt jezt aber was nicht mehr, die Ver-/Entschlüsselungs-Methoden werden zwar von der "Haupt"-Klasse aufgerufen aber sie liefern nicht das Ergebnis zurück, wie ich es haben will, dh immer noch verschlüsselt oder unversschlüsselt,dh sie wurden von den Methoden nicht bearbeitet.

Vielleicht liegt der Fehler aber auch darin, dass ich das Objekt der Klasse mit den Ver-/Entschlüsselungs-Methoden nicht richtig erzeugt habe

Klasse ConsApp ("Haupt"-Klasse):
Code:
/* Verschlüsseln:
 Nach einlesen des Strings soll der String in einer TXT-Datei abgespeichert werden.
 Danach soll eine angegebene TXT-Datei geöffnet, der Inhalt eingelesen und auf der Konsole ausgegeben werden.
 Dieser Inhalt kann dann verschlüsselt oder entschlüsselt werden
*/

import java.io.*;

public class ConsApp extends Verschluesselung
{
    static String middle, first, last, filename;
    static BufferedReader in;
    static PrintWriter out;
    static String DOS_CODE_PAGE = "Cp850";
    
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////           
////////////////////////////// Einlesen des Datei-Inhaltes ////////////////////////////////////////////////////////////     
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    public static void main(String args[]) throws IOException
    {
        out = new PrintWriter(new OutputStreamWriter(System.out, DOS_CODE_PAGE), true);
        in  = new BufferedReader( new InputStreamReader(System.in, DOS_CODE_PAGE));
        try 
        {
            out.println("Verschlüsselung von Textdateien in Java");
            out.println("---------------------------------------"); 
            
            
            first = new String("Datei-Inhalt:");            
            
            middle = "?";
            
            
            out.print(first); out.print(' '); out.print(middle); out.println();
            out.println();
            out.println("Bitte geben Sie einen Text ein, der an Stelle der Fragezeichen in einer Text-Datei eingesetzt werden soll.");
            out.println();
            middle = in.readLine();
            
            StringBuffer buff = new StringBuffer(first.length() + middle.length());
            
            buff.append(first).append(' ').append(middle).append(' ');
            out.println();
            out.println(buff.toString());  
            
          
			create(middle);
		}
		
		catch (Throwable erx) 
	        { // Error or Exception
	            out.println(); 
	            out.println("Der eingegebene Datei-Name konnte nicht gefunden werden.");
	            out.println("Bitte überprüfen Sie Ihre Eingabe noch einmal und geben Sie den Dateinamen ohne die .txt-Endung ein.");
	            open(filename);
	        }
	    finally 
	        {
	            out.println();
	            out.println("To exit, close the window.");
	            in  = new BufferedReader( new InputStreamReader(System.in, DOS_CODE_PAGE));
	            in.readLine();
	        }
  }     
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////           
////////////////////////////// Erstellen einer Text-Datei /////////////////////////////////////////////////////////////     
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
       public static void create(String middle)
       {
	       	try
	       	{
	       		out.println();
	            out.println("Bitte geben Sie einen Namen ein, unter dem die Datei gespeichert werden soll.");
	            out.println();
	            filename = in.readLine()+ ".txt";
	            out.println();
	            FileWriter file = new FileWriter(filename);
	            String message = middle;
	            file.write(message, 0, message.length());
	            file.close();
	            open(filename);
	        }
	        catch (Exception e) 
	        { // Error or Exception
	            out.println(); 
	            out.println("Der eingegebene Datei-Name konnte nicht gelesen werden. Versuchen Sie es bitte erneut");
	            create(middle);
	        }
	   }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////            
////////////////////////////// Öffnen einer Text-Datei ///////////////////////////////////////////////////////////////            
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
        public static void open(String filename)
        {  
        	try
        	{  
	            out.println("Bitte geben Sie jetzt den Namen der Datei ein, die geöffnet und deren Inhalt jetzt angezeigt werden soll.");
	            out.println();
	            filename = in.readLine()+ ".txt";
	            out.println();
	            FileReader open_file = new FileReader(filename);
	            StringBuffer message1 = new StringBuffer();
	            char c;
	            while (open_file.ready())
	            {
	               c = (char)open_file.read();
	               message1.append(c);
	            }
	            
	            middle =(message1.toString());
	            open_file.close();
	            action();
        	}
        	catch (Exception e) 
	        { // Error or Exception
	            out.println(); 
	            out.println("Der eingegebene Datei-Name konnte nicht gefunden werden.");
	            out.println("Bitte überprüfen Sie Ihre Eingabe noch einmal und geben Sie den Dateinamen ohne die .txt-Endung ein.");
	            out.println();
	            open(filename);
	        }
        }
            
            //out.choice();
            
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////            
////////////////////////////// Auswahl ob Datei Ver- oder Entschlüsselt werden soll //////////////////////////////////           
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    	public static void action()
    	{
    		Verschluesselung Verschluesselung = new Verschluesselung();
    		try
    		{
	           		out.println();
	  				out.println("================ Cäsar Verschlüsselung für Textdateien ================");
	  				out.println();
	  				out.print(first); out.print(' '); out.print(middle); out.println();
		    		out.println();
				    out.println("Wählen Sie einen Modus : ");
				    out.println();
				    out.println(" <1> Verschlüsseln");
				    out.println(" <2> Entschlüsseln");
				    out.println();
				    int mode =  Integer.parseInt(in.readLine());
				    
				        if(mode==1)
				        {
				        	out.println();	
				            Verschluesselung.encode(middle);
				            out.println("Dateinhalt ist verschlüsselt worden: " + middle);
				            out.println();
				            out.println("Wenn Sie speichern möchten drücken Sie bitte 'J'");
				            String s = in.readLine();
				            if (s.equals("j") || s.equals("J"))
				            {
				            	create(middle);
				            }
				            else
				            {
				            	out.println();
				            	out.println("To exit, close the window.");
					            in  = new BufferedReader( new InputStreamReader(System.in, DOS_CODE_PAGE));
					            in.readLine();
				            }
				            	
				        }
				        else if(mode==2)
				        {
				        	out.println();
				            Verschluesselung.decode(middle);
				            out.println("Dateinhalt ist entschlüsselt worden: " + middle);
				            out.println("Wenn Sie speichern möchten drücken Sie bitte 'J'");
				            out.println();
				            String s = in.readLine();
				            if (s.equals("j") || s.equals("J"))
				            {
				            	create(middle);
				            }
				            else
				            {
				            	out.println();
				            	out.println("Um das Programm zu beenden, schließen Sie bitte das Fenster.");
				            }
				        }
				        else
				        {
				        	out.println();
				        	out.println("Bitte nur 1 oder 2 auswählen!");
				        	action();
				        }
			}
			catch (Exception e) 
			{ // Error or Exception
			     out.println();
				 out.println("Bitte wählen Sie nur die Zahl 1 oder 2 aus!");
				 action();
			}
        }
	 
}

Das hier ist meine neue Klasse mit den Ver-/Entschlüsselungsmethoden

Code:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////            
////////////////////////////// Verschlüsselungsfunktion //////////////////////////////////////////////////////////////           
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public class Verschluesselung
{ 
	static char key = 1;
	static String middle;

		  public static String encode( String s )
		  {
		    StringBuffer result = new StringBuffer();
		
		    for( int i = 0; i < s.length(); i++ )
		    {
		      int c = s.charAt( i );
		
		      if ( (c >= 'A') && (c <= 'z') ) {
		        c += key;
		        if( c > 'z' )
		          c = 'a' + c % 'z' -1;
		        if( (c > 'Z') && (c < 'a') ) 
		          c = 'A' + c % 'Z' - 1;
		      }
		      result.append( (char) c );
		    }
		    
		    middle = result.toString();
		    return middle;
		  } 
 	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////            
////////////////////////////// Entschlüsselungsfunktion //////////////////////////////////////////////////////////////           
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

		  public static String decode( String s )
		  {
		    StringBuffer result = new StringBuffer();
		    
		    for( int i = 0; i < s.length(); i++ )
		    {
		      int c = s.charAt( i );
		
		      if ( (c >= 'A') && (c <= 'z') ) {
		        c -= key;
		        if( (c < 'a') && (c > 'Z') )
		          c = 'a' + ('z' - c % 'a') - 1;
		        if( c < 'A' )
		          c = 'A' + ('Z' - c % 'A') - 1;
		      }
		      result.append( (char) c );
		    }
		
		    middle = result.toString();
		    return middle;
		  } 
}


Kann mir jemand sagen wo mein Fehler liegt und wie ich es schaffen kann dass mir ein entschlüsseltes Ergebnis zuürckgeliefert wird?

Gruß
diaspora
 
Also, du könntest erstmal alle static rausnehmen.
Die brauchst du in deinem programme nicht (auss natürlich in der Main methode)
 
Code:
Verschluesselung Verschluesselung = new Verschluesselung();
Nenn mal deine Objektrefern um.
Also die sollte anders als der Klassenname sein.

Dann müsstes du natürlich bei:

Code:
Verschluesselung.encode(middle);
und bei
Code:
[
Verschluesselung.decode(middle);
auch die neue Referenz benutzen.
 
Habe es mit

Verschluesselung ident = new Verschluesselung();

und dann

ident.encode(middle)M

versucht, geht aber auch nicht

Gruss
diaspora
 
Ich habe gerade nur mal die Verschluesselnklasse getestet, und die funktioniert.

Kommt denn bei dir eine Fehlermeldung, oder kommt da einfach garnichts?
 
Hallo diaspora,

Deine Klasse funktioniert, aber Du mußt die Rückgabewerte natürlich auch verarbeiten. Ein einfaches
Java:
ident.encode(middle);
führt natürlich zu keinem Ergebnis, wenn Du das Return der Methode nicht auffängst.

Mit
Java:
String encodedText = ident.encode(middle);
System.out.println(encodedText);
solltest Du dann auch eine Ausgabe erhalten...
 
Zurück