Dateien zeichenweise auslesen

mhamp

Mitglied
Hallo zusammen!

Ich habe folgendes Problem:
Ich möchte eine Datei laden, die ich dann später zeichenweise auslesen möchte.
Vorzugsweise möchte ich dabei angeben an welcher Stelle der Datei begonnen werden soll auszulesen und wieviele Zeichen (ab Stelle A) eingelesen werden sollen.

Ich habe schon ein bisschen mit dem File, FileReader und FileInputStream Klassen herumprobiert, allerdings komme ich auf keinen grünen Zweig 🙁

Ich wäre froh wenn mir jemand von euch einen Tipp geben könnte!
Danke 🙂
 
Danke für die schnelle Antwort 🙂
Also ich hatte schon ein paar Dinge ausprobiert, und das ist der Quelltext der zur Zeit vorhanden ist..

Mir wird außerdem eine NullPointerException ausgegeben (siehe Ende des Post).

Java:
        File f = new File("G:\\datei.dat");

        char cbuf[] = null;
        String wort = "";
        int zeichen = 0;

        try
        {
            FileReader fr = new FileReader(f);
            try
            {
                while(zeichen != -1)
                {
                    zeichen = fr.read(cbuf, 40, 32);

                    wort += cbuf;
                    System.out.println(wort);
                }

            }
            catch (IOException ex)
            {
                System.out.println("fehler1");
            }
        }
        catch (FileNotFoundException ex)
        {
            System.out.println("fehler2");
        }

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:129)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at lfsreplays.Hauptfenster.jButton1ActionPerformed(Hauptfenster.java:104)
        at lfsreplays.Hauptfenster.access$000(Hauptfenster.java:27)
        at lfsreplays.Hauptfenster$1.actionPerformed(Hauptfenster.java:57)
        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)
ERSTELLEN ERFOLGREICH (Gesamtzeit: 0 Minuten 8 Sekunden)
 
Interessant zu wissen wäre was in Zeile 104 in Hauptfenster.java steht. Dort ist irgendwas null.
 
das dürfte Zeile 14 im geposteten Code entsprechen
> zeichen = fr.read(cbuf, 40, 32);

und das Buffer-Array ist null, was der Stream nicht so witzig findet
 
Ich hätts ein bisschen anders und vielleicht etwas schöner gemacht:

Java:
import java.io.*;

public class test{

	public static void main(String[] args) {
		
		File file = new File("versuch.txt");
		String text = "";
		char[] array;
		
		try {
			BufferedReader r = new BufferedReader(new FileReader(file));
			String line = "";
			
			while((line = r.readLine()) != null){
				text += line;
			}
			
			r.close();
		} catch (IOException e) {
			System.out.println("Exception: "+e.getMessage());
		}
		
		array = text.toCharArray();

		
		for(char c:array){
			System.out.print(c);
		}
	}
}

zum Schluss geb ich einfach das Array mit einer foreach Schleife aus
 
tja, ein wenig wird er sich dann wohl selbst drum kümmern müssen, ich weiss ja nicht genau was er damit machen will! ;-)
 
Okay,
ich danke erstmal für eure Hilfe!

Ich habe mich noch ein bisschen anders durchgewuselt und bin nun auf die Lösung gekommen, dass ganze mit einem BufferReader Objekt und der Methode read() zu lösen.
Diese Methode bietet auch die Möglichkeit nur bestimmte Zeichen auszulesen (also von Stelle A bis Stelle B).

Allerdings habe ich noch einen kleinen Stolperstein.
Die Signatur sieht folgendermaßen aus:

public int read(char[] cbuf, int off, int len);

Nun komme ich an der stelle "char[] cbuf" nicht weiter.
Was ist mit dem cbuf - Destination buffer gemeint?


Edit:

Okay, GIDF 😉

Habe es gerade rausgefunden: Lesen und Schreiben von Textdateien

Danke vielmals für eure Hilfe!
 
Zuletzt bearbeitet:
dort wird hineingeschrieben... der rückgabewert ist die anzahl der gelesenen zeichen...

dein Problem war vorher, dass dein buffer null war, du musst ihn initialisieren... char cbuf[] = new char[32];
 

Neue Themen


Zurück
Oben