Textdatei wird beim Speichern nicht überschrieben, sondern ergänzt

noneofthem

Mitglied
Hallo zusammen,

ich habe zwei Probleme.

1.
Ich schreibe mir einen simplen Texteditor zur Übung. soweit klappt alles, nur beim Speichern hab ich das Problem, dass bereits vorhandene Dateien beim erneuten Speichern nicht überschrieben, sondern nur ergänzt werden, was ja nicht Sinn der Sache ist.

2.
Ich hab noch nicht herausgefunden, wie man es schafft, dass schon im Öffnen-Dialogfenster nur die Dateiformate angezeigt werden, die auch geöffnet werden dürfen. Momentan umgehe ich das, indem ich eine Fehlermeldung ausgebe, wenn jemand etwas öffnen will, das nicht erlaubt ist.

Ich wäre dankbar für jeden Tipp. Hier ist der Code:

Java:
package editor;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

public class Jeditor extends JFrame implements ActionListener {

	public String windowTitle = "jEditor";
	private JEditorPane editPane;
    private JMenuItem newAction;
    private JMenuItem openAction;
    private JMenuItem saveAction;
    private JMenuItem exitAction;
    private JMenuItem copyAction;
    private JMenuItem cutAction;
    private JMenuItem pasteAction;
    private JMenuItem aboutAction;
    private File file;
    private boolean isFileLoaded = false;
    Font editPaneFont = new Font ( "verdana", NORMAL, 12 );
	
	public Jeditor () {
		
		this.setTitle ( windowTitle + " - " + "untitled file" );
		this.setDefaultCloseOperation ( JFrame.DO_NOTHING_ON_CLOSE );
		this.setSize ( new Dimension ( 640, 480 ) );
		this.setLocationRelativeTo ( null );

		
		addWindowListener ( new WindowAdapter() { 
	    
			public void windowClosing ( WindowEvent e ) { 
	            exit(); 
	         } 
	    });
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> MENU
		
		JMenuBar menuBar = new JMenuBar();
		menuBar.setLocation(0, 0);
		
		JMenu fileMenu = new JMenu ( "File" );
	    JMenu editMenu = new JMenu ( "Edit" );
	    JMenu aboutMenu = new JMenu ( "About" );
	    
	    newAction = new JMenuItem ( "New" );
        openAction = new JMenuItem ( "Open" );
        saveAction = new JMenuItem ( "Save" );
        exitAction = new JMenuItem ( "Exit" );
        copyAction = new JMenuItem ( "Copy" );
        cutAction = new JMenuItem ( "Cut" );
        pasteAction = new JMenuItem ( "Paste" );
        aboutAction = new JMenuItem ( "About" );
        
        fileMenu.add ( newAction );
        fileMenu.add ( openAction );
        fileMenu.add ( saveAction );
        fileMenu.addSeparator();
        fileMenu.add ( exitAction );
        
        editMenu.add ( copyAction );
        editMenu.add ( cutAction );
        editMenu.add ( pasteAction );
        
        aboutMenu.add ( aboutAction );

	    menuBar.add ( fileMenu );
	    menuBar.add ( editMenu );
//      menuBar.add ( Box.createHorizontalGlue() ); // activate to place aboutMenu on the right
        menuBar.add ( aboutMenu );
        
        newAction.addActionListener ( this );
        openAction.addActionListener ( this );
        saveAction.addActionListener ( this );
        exitAction.addActionListener ( this );
        
        copyAction.addActionListener ( this );
        cutAction.addActionListener ( this );
        pasteAction.addActionListener ( this );
        
        aboutAction.addActionListener ( this );
        
        
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> EDIT PANE
        
		editPane = new JEditorPane();
		editPane.setFont ( editPaneFont );
		JScrollPane editScrollPane = new JScrollPane(
				
				editPane,
				JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
		);
		
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ADD STUFF to Window
		
		this.setJMenuBar ( menuBar );
		this.add ( editScrollPane );
		isFileLoaded = true;
		this.setResizable ( true );
		this.setVisible ( true );
	}
	
	public void actionPerformed ( ActionEvent e ) {
		
		if ( e.getActionCommand().equalsIgnoreCase ( "new" ) ) {
			newFile ();
		}
		
		if ( e.getActionCommand().equalsIgnoreCase ( "open" ) ) {
			openFile ();
		}
		
		if ( e.getActionCommand().equalsIgnoreCase ( "save" ) ) {
			saveFile();
		}
		
		if ( e.getActionCommand().equalsIgnoreCase ( "exit" ) ) {
			exit();
		}
		
		if ( e.getActionCommand().equalsIgnoreCase ( "copy" ) ) {
			
		}
		
		if ( e.getActionCommand().equalsIgnoreCase ( "cut" ) ) {
			
		}
		
		if ( e.getActionCommand().equalsIgnoreCase ( "paste" ) ) {
			
		}
		
		if ( e.getActionCommand().equalsIgnoreCase ( "about" ) ) {
			showAbout ();
		}
		
	} // END of actionPerformed()
	
	
	void newFile () {
		
		if ( isFileLoaded == true) {
			
			int newFileQuestion = JOptionPane.showConfirmDialog (
					
					null,
					"Are you sure you want to create a new file?\n" +
					"Unsaved changes on the current file will be lost!",
					"Are you sure?",
					JOptionPane.OK_CANCEL_OPTION
			);
			
			if ( newFileQuestion == JOptionPane.YES_OPTION ) {
				
				editPane.setText ( "" );
				this.setTitle ( windowTitle + " - " + "untitled file" );
				
			} else
				return;
			
		} else {
			
			editPane.setText ( "" );
	
		}
	} // END of newFile()
	
	
	void openFile () {
		
		JFileChooser fileChooser = new JFileChooser ( "." );
		fileChooser.setFileSelectionMode ( JFileChooser.FILES_ONLY );
		fileChooser.setOpaque ( true );
		
		int ret = fileChooser.showDialog ( null, "Select file" );
			    
		if ( ret == JFileChooser.APPROVE_OPTION ) {
		 
		   	File selectedFile = fileChooser.getSelectedFile();
		   	
		   	if ( ( selectedFile.getName().toLowerCase().endsWith ( ".conf" ) ) ||
		   		 ( selectedFile.getName().toLowerCase().endsWith ( ".html" ) ) ||
		   		 ( selectedFile.getName().toLowerCase().endsWith ( ".java" ) ) ||
		   		 ( selectedFile.getName().toLowerCase().endsWith ( ".py"   ) ) ||
		   		 ( selectedFile.getName().toLowerCase().endsWith ( ".rtf"  ) ) ||
		   		 ( selectedFile.getName().toLowerCase().endsWith ( ".txt"  ) ) ||
		   		 ( selectedFile.getName().toLowerCase().endsWith ( ".xml"  ) )
		   	) {
			  
		   		try {
			   		
			   		file = new File ( selectedFile.getAbsolutePath() );
			   		FileReader fileReader = new FileReader( file );
					
					BufferedReader br = new BufferedReader ( fileReader );
					StringBuffer sb = new StringBuffer();
					String eachLine = br.readLine();

					while ( eachLine != null ) {
							
					  sb.append ( eachLine );
					  sb.append ( "\n" );
					  eachLine = br.readLine();
					}
						
					editPane.setText ( sb.toString() );
					editPane.setCaretPosition ( 0 );
					this.setTitle ( windowTitle + " - " + selectedFile.getAbsolutePath() );
					isFileLoaded = true;
						
				} catch ( FileNotFoundException e1 ) {

					e1.printStackTrace();
						
				} catch ( IOException e1 ) {
						
					e1.printStackTrace();
				}
				
		   	} else {
		   		
				JOptionPane fileFormatPane = new JOptionPane ( "Info" );
				fileFormatPane.showMessageDialog (
						
						null,
						"Sorry. Currently only these extensions are permitted: \n\n" +
						".conf\n" +
						".html\n" +
						".java\n" +
						".py\n" +
						".rtf\n" +
						".txt\n" +
						".xml\n"
				);
		   	}
	    }
	} // END of openFile()
	
	
	void saveFile () {
		
		JFileChooser fileChooser = new JFileChooser ( "." );
		fileChooser.setFileSelectionMode ( JFileChooser.FILES_ONLY );
		fileChooser.setOpaque ( true );
		
		int ret = fileChooser.showSaveDialog ( null );
			    
		if ( ret == JFileChooser.APPROVE_OPTION ) {
		 
		   	File selectedFile = fileChooser.getSelectedFile();

		   	try {
		   		
		   		file = fileChooser.getSelectedFile(); 
		   		FileWriter writer = new FileWriter( file, true );
		   	    BufferedWriter bw = new BufferedWriter ( writer );
		   		bw.write(editPane.getText());
		   	    bw.newLine();
		   	    
		   	    bw.flush();
		   	    bw.close();
		   	    this.setTitle ( windowTitle + " - " + selectedFile.getAbsolutePath() );
		   	    isFileLoaded = false;
		   	    
			} catch ( FileNotFoundException e1 ) {

				e1.printStackTrace();
					
			} catch ( IOException e1 ) {
					
				e1.printStackTrace();
			}
		}
	} // END of saveFile()
	
	
	void showAbout () {
		
		JOptionPane aboutPane = new JOptionPane ( "about jEditor" );
		aboutPane.showMessageDialog (
				
				null,
				"jEditor 1.0\n" +
				"Created by Amir Rehman 2011\n" +
				"The GPL v3 applies."
		);
	} // END of showAbout(()
	
	void exit () {
		
		int exitQuestion = JOptionPane.showConfirmDialog (
				
				null,
				"Are you sure you want to exit now?\n" +
				"Unsaved changes will be lost!",
				"Done already?",
				JOptionPane.OK_CANCEL_OPTION
		);
		
		if ( exitQuestion == JOptionPane.YES_OPTION )
			System.exit ( 0 );
		else
			return;
	} // END of exit()
	
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> MAIN method
	
	public static void main ( String[] args ) {

		Jeditor editor = new Jeditor();
		
	} // END of main()

} // END of Jeditor
 
G

Gast2

Gast
1.
Ich schreibe mir einen simplen Texteditor zur Übung. soweit klappt alles, nur beim Speichern hab ich das Problem, dass bereits vorhandene Dateien beim erneuten Speichern nicht überschrieben, sondern nur ergänzt werden, was ja nicht Sinn der Sache ist.
Das liegt am true, dass du dem FileWriter übergibst. Steht auch so in der API.

2.
Ich hab noch nicht herausgefunden, wie man es schafft, dass schon im Öffnen-Dialogfenster nur die Dateiformate angezeigt werden, die auch geöffnet werden dürfen. Momentan umgehe ich das, indem ich eine Fehlermeldung ausgebe, wenn jemand etwas öffnen will, das nicht erlaubt ist.
Dafür gibts den FileFilter (Java 2 Platform SE v1.4.2)
 
G

Gonzo17

Gast
2.
Ich hab noch nicht herausgefunden, wie man es schafft, dass schon im Öffnen-Dialogfenster nur die Dateiformate angezeigt werden, die auch geöffnet werden dürfen. Momentan umgehe ich das, indem ich eine Fehlermeldung ausgebe, wenn jemand etwas öffnen will, das nicht erlaubt ist.

JFileChooser (Java Platform SE 6)

Sowas hier? FileFilter musste dir selbst anschauen, aber da kannste soweit ich weiß definieren, welche Dateiendungen akzeptiert werden.

Beispiele dafür gibts auch hier: How to Use File Choosers (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
 

noneofthem

Mitglied
Hey!

Wow! Das ging jetzt aber flott! Ich danke euch beiden sehr! Ich hab das mit dem FileWriter getestet. Das funktioniert nun wirklich. Muss mir den wohl nochmal genauer anschauen. Das mit dem JFileChooser teste ich jetzt. Ich schreibe euch dann gleich, ob es das war oder nicht. Nochmals vielen Dank!


UPDATE:

Alles funktioniert nun wie ich es haben wollte. Vielen Dank nochmal für die Tipps! Das hat mir sehr geholfen.

Wünsche euch noch einen schönen Nachmittag!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
S Importieren einer Textdatei Java Basics - Anfänger-Themen 2
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
JDimi Textdatei mit beliebig vielen Zeilenumbrüchen erstellen Java Basics - Anfänger-Themen 2
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
C Input/Output Textdatei vom Java-Programm nicht geladen Java Basics - Anfänger-Themen 58
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
T Länge einer Textdatei Java Basics - Anfänger-Themen 11
S Übertragen einer Textdatei in ein 2d-Array Java Basics - Anfänger-Themen 2
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
T Textdatei öffnen und ans Ende scrollen Java Basics - Anfänger-Themen 11
J Textdatei filtern und bearbeiten Java Basics - Anfänger-Themen 1
C Textdatei oder doch eine Datenban Java Basics - Anfänger-Themen 15
J Input/Output Tilemap effizient speichern als Textdatei Java Basics - Anfänger-Themen 7
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
M Textdatei(en) in .jar schreiben Java Basics - Anfänger-Themen 5
K Textdatei auslesen Java Basics - Anfänger-Themen 10
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
K Erste Schritte Textdatei -> Array Java Basics - Anfänger-Themen 1
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
G Erste Schritte Textdatei einlesen und in Array speichern Java Basics - Anfänger-Themen 5
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
L Namen aus Textdatei auslesen Java Basics - Anfänger-Themen 1
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
S Methoden Textdatei auslesen Java Basics - Anfänger-Themen 11
G Textdatei auf Dubletten prüfen Java Basics - Anfänger-Themen 8
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
T Textdatei beschreiben/bearbeiten Java Basics - Anfänger-Themen 4
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
C Einlesen in Array von Textdatei sehr langsam Java Basics - Anfänger-Themen 7
R Werte in eine Textdatei schreiben Java Basics - Anfänger-Themen 20
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
D Textdatei in geschachtelte Array speichern Java Basics - Anfänger-Themen 17
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
P Input/Output Textdatei einlesen - 1. Zeichen fehlt Java Basics - Anfänger-Themen 7
J Input/Output Textdatei in einer JAR lesen Java Basics - Anfänger-Themen 3
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
J Textdatei einlesen und ausgeben - NullPointerException Java Basics - Anfänger-Themen 5
M Input/Output Objekte in einer Textdatei ablegen (Highscore) Java Basics - Anfänger-Themen 9
P CSV Daten in Textdatei Speichern Java Basics - Anfänger-Themen 3
K Input/Output Eingelesenedaten von Scanner als Textdatei ausgeben? Java Basics - Anfänger-Themen 2
N Input/Output Konsolenausgabe in Textdatei speichern/umleiten Java Basics - Anfänger-Themen 7
V Auf Textdatei in jar zugreifen Java Basics - Anfänger-Themen 3
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
S Methoden Textdatei Teil String auslesen Java Basics - Anfänger-Themen 3
H Zeile aus Textdatei lesen und in Textfield schreiben Java Basics - Anfänger-Themen 4
J durch drücken eines buttons text in einer textdatei speichern Java Basics - Anfänger-Themen 2
W letzte Zeile aus wachsender Textdatei auslesen Java Basics - Anfänger-Themen 5
algebraiker Textdatei-Import Java Basics - Anfänger-Themen 8
M Datum aus einer Textdatei holen Java Basics - Anfänger-Themen 9
C Spalte einer Textdatei einlesen Java Basics - Anfänger-Themen 10
Fab1 Input/Output Textdatei auslesen Java Basics - Anfänger-Themen 4
O grosse Textdatei performant als string speichern Java Basics - Anfänger-Themen 8
P Mit offset aus Textdatei auslesen Java Basics - Anfänger-Themen 3
C Textdatei einlesen Java Basics - Anfänger-Themen 8
V Falsches Auslesen von Textdatei Java Basics - Anfänger-Themen 3
T Input/Output 20Mb Textdatei zeilenweise auslesen Java Basics - Anfänger-Themen 10
N Textdatei lesen mit Umlauten Java Basics - Anfänger-Themen 16
N In Textdatei speichern und auslesen Java Basics - Anfänger-Themen 18
M Textdatei einlesen Java Basics - Anfänger-Themen 3
M Liste in Textdatei schreiben Java Basics - Anfänger-Themen 7
B Input/Output Textdatei einlesen Windows / Linux Java Basics - Anfänger-Themen 2
F Textdatei einlesen Java Basics - Anfänger-Themen 7
C Textdatei einlesen -> Probleme Java Basics - Anfänger-Themen 3
K Input/Output Textdatei scheibchenweise auslesen Java Basics - Anfänger-Themen 8
S Textdatei stückweise einlesen Java Basics - Anfänger-Themen 7
D 1 Wort aus TextDatei auslesen Java Basics - Anfänger-Themen 3
J Jede Zeile der Textdatei in ListUI eintragen Java Basics - Anfänger-Themen 2
A Double Array in TextDatei schreiben Java Basics - Anfänger-Themen 9
K Richtige Pfadangabe einer Textdatei Java Basics - Anfänger-Themen 7
B OOP Aus Textdatei auslesen Java Basics - Anfänger-Themen 11
P Textdatei auf erste Zeichenkette Prüfen... Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben