OOP Mit RandomAccesFile auslesen und in Datei schreiben

  • Themenstarter Themenstarter Legionista
  • Beginndatum Beginndatum
L

Legionista

Gast
Java:
package silleraaron;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;





public class Controll implements ActionListener {
	
	View myMainView = new View();
	
	
	
	
	File whitelist = new File("I:\\eclipse\\MyProjects\\Whitelist.txt");
	File protkoll = new File("I:\\eclipse\\MyProjects\\protokoll.txt");
	
	String Eingabe;
	
	RandomAccessFile raf, raf2;
	
	

	public Controll() {
		myMainView.jSenden.addActionListener(this);

	
	}


	
	public void EinAusgabe() throws IOException
	{
		try {
		Eingabe = myMainView.jIpAdresse.getText();
		
	
		raf = new RandomAccessFile(Eingabe, "r");
		raf = new RandomAccessFile(whitelist, "rw");
		raf.close();
		
		
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		}
	}
	
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("Senden"))
				{
			
			try {
				EinAusgabe();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
				}
		
	}
	
	public static void main(String[] args)
	{
		new Controll();
	}

}


Guten Tag,

meine Aufgabe ist es mithilfe des RAF die Eingabe (in meinem Fall eine URL bzw. IP Adresse) eines Users auszulesen und in die Datei whitelist und protokoll zu schreiben. Leider klappt dies nicht ganz so einfach und da ich weiss das es recht simpel ist, ich trotzdem kurz vorm verzweifeln bin, wollte ich hie rum Rat bitten. Weiss jemand evtl. zu helfen?

Mit freundlichen Grüßen,

Legio
 
Mal Abgesehen davon, dass Du die Namenskonventionen nicht einhältst sieht dass doch schon ganz gut aus.
In Zeile 45 musst Du natürlich eine andere Variable für das zweite RAF anlegen, sonst hast Du ja nicht beide gleichzeitig in der Hand...
Dannach kannst Du dann die Bytes aus der einen Datei auslesen, und an die Andere anhängen. Näheres dazu liefert (wie fast immer) die API: [JAPI]RandomAccessFile[/JAPI].

bye
TT
 
Java:
package silleraaron;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;





public class Controll implements ActionListener {
	
	View myMainView = new View();
	
	
	
	
	File whitelist = new File("I:\\eclipse\\MyProjects\\Whitelist.txt");
	File protkoll = new File("I:\\eclipse\\MyProjects\\protokoll.txt");
	
	String Eingabe,Eingabe2, Ausgabe, Ausgabe2;
	
	RandomAccessFile raf, raf2;
	
	

	public Controll() {
		myMainView.jSenden.addActionListener(this);

	
	}


	
	public void EinAusgabe() throws IOException
	{
		try {
		Eingabe = myMainView.jIpAdresse.getText();
		Eingabe2 = myMainView.jIpAdresse.getText();
		
	
		raf = new RandomAccessFile(Eingabe, "r");
		raf2 = new RandomAccessFile(Eingabe2, "r");
		
		raf.writeBytes(Ausgabe);
		raf2.writeBytes(Ausgabe2);
		
		raf.close();
		
		
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		}
	}
	
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("Senden"))
				{
			
			try {
				EinAusgabe();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
				}
		
	}
	
	public static void main(String[] args)
	{
		new Controll();
	}

}

Hallo,

danke für die Hilfe.

Ich verstehe das ich mit dem RAF die Bytes aus dem String auslese und dann in einen anderen String reinschreibe. Hierbei ist jedoch für mich jetzt das Problem diesen String in die Datei reinzuschreiben, die von meinem File whitelist erstellt werden soll, hinzukriegen.

Es kann natürlich sein das mein Verständnis im Umgang mit den JavaDocs nicht ausgereift ist, aber irgendwie komme ich nciht drauf.
 
Ich verstehe das ich mit dem RAF die Bytes aus dem String auslese und dann in einen anderen String reinschreibe.
Nein. Du liest/schreibst mit dem RAF den Inhalt einer Datei. Den kann man als String interpretieren, es könnte aber auch irgend ein beliebiger Birärcode sein.

Hierbei ist jedoch für mich jetzt das Problem diesen String in die Datei reinzuschreiben,
Daszu must Du den String in eine Folge von Bytes umwandeln. Glücklicher Weise kennt String die Methode
Code:
getBytes()
.

Hinweis am Rande: Ein RAF dafür zu nutzen ist eine ziemlich undankbare Aufgabenstellung, weil man sich 'ne menge Gedanken darüber machen muss, wass auf der Festplatte mit so einer Datei passiert, wenn man darauf rumschreibt. Da kommt's schnell zu Datenverlusten...

bye
TT
 
Java:
Eingabe = myMainView.jIpAdresse.getText();
		Eingabe2 = myMainView.jIpAdresse.getText();
		
		Eingabe.getBytes();
		Eingabe2.getBytes();
		
		raf = new RandomAccessFile(Eingabe, "r");
		raf2 = new RandomAccessFile(Eingabe2, "r");
		
		raf.writeBytes(Ausgabe);
		raf2.writeBytes(Ausgabe2);

Hallo,

vielen Dank nochmals.

Ich stehe irgendwie momentan total auf dem Schlauch. Ich verstehe also das ich mit
Java:
Eingabe.getBytes();
den Inhalt des Strings in eine Datei umwandeln kann und um diese wiederum irgendwie wieder schreiben zu können, benutze ich
Java:
raf.writeBytes
. Nur diese Brücke hin zu meiner Textdatei zu machen ist für mich momentan wie Bahnhof. Kann mir da jemand noch irgendwie nen Rat geben?
 
Hallo,

habe einen Fehler gefunden. Jedoch zeigt mir das Programm immer noch eine weitere Fehlermeldung an.

Zunächst meine überarbeitung:

Java:
Eingabe = myMainView.jIpAdresse.getText();
				Eingabe2 = myMainView.jIpAdresse.getText();
				

				raf = new RandomAccessFile(Eingabe, "r");
				raf2 = new RandomAccessFile(Eingabe2, "r");
				
				raf.writeBytes(whitelist + "\r\n");
				raf2.writeBytes(protkoll + "\r\n");

Hier die Fehlermeldung:

Java:
java.io.FileNotFoundException: w (Das System kann die angegebene Datei nicht finden)
	at java.io.RandomAccessFile.open(Native Method)
	at java.io.RandomAccessFile.<init>(Unknown Source)
	at java.io.RandomAccessFile.<init>(Unknown Source)
	at silleraaron.Controll.actionPerformed(Controll.java:49)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 
Hast Du denn die Aufgabe überhaupt schon mal strukturiert, also mal aufgeschrieben, was in welcher Reihenfolge gemacht werden muss (mal ganz unabhängig von der zu verwendenen Syntax)?

Wennn Dir erstmal der Alauf klar ist können wir besser über die programmatischen Umsetzung reden.

bye
TT
 
Tipp: Klar geht RAF für Textdateien, doch ich würde empfehlen, sich vom RAF zu lösen und insbesondere für Textdateien Scanner (lesen) und Formatter (schreiben) zu nutzen.
 

Zurück
Oben