Join fachinformatiker.de Forum Now
Ergebnis 1 bis 6 von 6
Like Tree1gefällt das
  • 1 Post By Klotzkopp

Erster Versuch mit Dateien: NullPointerException

Diskussion über Erster Versuch mit Dateien: NullPointerException in Java der Kategorie Programmierung; Hallo! Ich spiele grad ein wenig mit Java und war jetzt bei Dateien lesen/schreiben angekommen. Also wollte ich einen kleinen ...

  1. #1
    Reg.-Benutzer Avatar von Devinius
    Reg.-Datum
    26.06.2012
    Ort
    Nähe Erfurt
    Beiträge
    4

    Beitrag Erster Versuch mit Dateien: NullPointerException

    Hallo!
    Ich spiele grad ein wenig mit Java und war jetzt bei Dateien lesen/schreiben angekommen.
    Also wollte ich einen kleinen Editor in der Konsole schreiben. Es soll einfach die Datei lesen, den aktuellen Inhalt ausgeben und einen neuen speichern.
    Damit ich ein wenig übe habe ich alles in Klassen unterteilt: Die Main Klasse, eine Editor und eine FileHandler Klasse.
    Das öffnen geht soweit, nur gibt er leider eine NullPointerExp. zurück, wenn es um die Ausgabe geht.
    Hier erst einmal der Quellcode:

    Main
    Code:
    import java.io.IOException;
    
    
    public class Main {
    
    	/**
    	 * @param args
    	 * @throws IOException 
    	 */
    	public static void main(String[] args) throws IOException {
    		new Editor();
    	}
    
    }
    Editor
    Code:
    import java.io.IOException;
    import java.util.Scanner;
    
    
    public class Editor {
    
    	private String filename = "";
    	private String filepath = "";
    	private String newContent = "";
    	
    	public Editor() throws IOException
    	{
    		Scanner scanner = new Scanner(System.in);
    		System.out.println("In welchem Ordner liegt die Datei? (leer lassen für Standard)");
    		this.filepath = scanner.nextLine();
    		System.out.println("Wie ist der Name der Datei?");
    		this.filename = scanner.nextLine();
    		
    		FileHandler fh = new FileHandler(this.filepath, this.filename);
    		System.out.println("Datei geöffnet, aktueller Inhalt: ");
    
    			for (String zeile : fh.getFilecontent()) {
    				System.out.println(zeile);
    			}
    	}
    	
    }
    FileHandler
    Code:
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    
    
    public class FileHandler {
    
    	private String filename = "";
    	private String filepath = "";
    	private ArrayList<String> filecontent;
    	
    	public FileHandler(String filepathToOpen, String filenameToOpen) throws IOException
    	{
    		this.filename = filenameToOpen;
    		this.filepath = filepathToOpen;
    		this.openFile();
    	}
    	
    	private void openFile() throws IOException
    	{
    		String zeile = "";
    		try
    		{
    			FileReader filereader = new FileReader(this.filepath + this.filename);
    			BufferedReader br = new BufferedReader(filereader);
    			do
    			{
    				zeile = br.readLine();
    				
    				try
    				{
    					System.out.println(zeile);
    					this.filecontent.add(zeile);
    				}
    				catch (Exception ex)
    				{
    					
    				}
    			} while (zeile != null);
    		}
    		catch (FileNotFoundException ex)
    		{
    			System.err.println(ex);
    		}
    	}
    	
    	public ArrayList<String> getFilecontent() {
    		return filecontent;
    	}
    
    	public void setFilecontent(ArrayList<String> filecontent) {
    		this.filecontent = filecontent;
    	}
    
    	public boolean saveFile() throws IOException
    	{
    		File datei = new File(this.filepath + this.filename);
    		FileWriter fw = new FileWriter(datei, true);
    	
    		for (String line : this.filecontent) {
    			fw.write(line);
    		}
    		
    		
    		return true;
    	}
    	
    }
    In der Textdatei steht einfach nur:
    Hallo

    Welt
    Die Konsolenausgabe sieht wie folgt aus:
    In welchem Ordner liegt die Datei?
    C:\Users\alexander\workspace_Tutorial\MiniFileEdit orConsole\
    Wie ist der Name der Datei?
    text.txt

    Datei geöffnet, aktueller Inhalt:
    Exception in thread "main" java.lang.NullPointerException
    at Editor.<init>(Editor.java:22)
    at Main.main(Main.java:11)
    Die Zeile 22 in der Editor.java ist die folgende:
    Code:
    for (String zeile : fh.getFilecontent()) {
    Da ich in der FileHandler eigentlich auf NULL prüfe, bevor ich die Daten speichere, wundere ich mich, dass diese Meldung kommt.
    Allgemein: Da ich Anfänger bin, bin ich auch über jedes Kommentar bezüglich des Programmierstiles dankbar.

    Einen schönen Freitag wünscht

    Alex


  2. #2
    mcn
    mcn ist offline
    Reg.-Benutzer
    Reg.-Datum
    14.06.2012
    Beiträge
    39

    Standard

    Hiho Devinius,

    sorry. Ich habe leider keine Ahnung von Java.

    Aber:

    Code:
    String zeile = "";
    		try
    		{
    			FileReader filereader = new FileReader(this.filepath + this.filename);
    			BufferedReader br = new BufferedReader(filereader);
    			do
    			{
    				zeile = br.readLine();
    				
    				try
    				{
    					System.out.println(zeile);
    					this.filecontent.add(zeile);
    				}
    				catch (Exception ex)
    				{
    					
    				}
    			} while (zeile != null);
    		}
    		catch (FileNotFoundException ex)
    		{
    			System.err.println(ex);
    		}
    Das sieht mir verdächtig aus. Debug doch mal deine Klasse FileHandler. Ich vermute den Fehler in der do...while-Schleife.
    Mach da mal ein Kopf-gesteuertes Konstruckt a la while(bedingung) { ... DEIN CODE ... } draus (Zeile 22 hat übrigens m.E. nichts mit dem Speichervorgang zu tun... also erstmal nicht).


    Was die Struckturierung deines Code angeht: leserlich ist er. Geh mehr Richtung Column-Pattern - spricht: richte z.B. im Bereich der Variablen-Deklaration als Spalte aus, so dass z.B. die Zuweisungoperatoren "=" übereinander stehen.

    Ich versteh auch nicht warum die Information zum Speicherort in zwei Klassen vorgehalten werden. In der Klasse Editor und in der Klasse FileHandler. Warum übergibst du nicht eine Objekt-Referenz auf das jeweilige Objekt Editor und rufst die Daten dann von diesem ab? Spart dir eine Zuweisung beim Erzeugen der FileHandler-Klasse.

    Auch würde ich die Datenhaltung von der Datenbeschaffung trennen und in einzelne "Schichten?" auslagern. In FileHandler also wirklich nur die Datenbeschaffung programmieren und ggf. eine weitere Klasse für die Datenhaltung schaffen. Wenn das denn überhaupt nötig ist - könnte hier vllt. auch in die Klasse Editor verlagert werden. Davon ausgehend dass die Klasse Editor für jeweils eine einlesbare/einzulesende Datei darstellt - private String newContent = ""; in der Klasse Editor lässt mich das vermuten.
    Wenn du Datenbeschaffung und Datenhaltung in der FileHandler-Klasse trennst und Objektreferenzen übergibst, kannst du die Methoden der FileHandler-Klasse statisch implementieren und musst nicht das kmpl. Objekt erzeugen.

    Hm, was noch.

    public Editor() throws IOException
    {
    DEIN CODE
    }

    Ich bin ja eher in C# unterwegs. Deswegen die evtl. saublöde Frage: Das ist der Constructor der Klasse Editor? Ich finde ja man sollte den Constructor Constructor sein lassen. Das Laden der Daten - also Abfrage nach Speicherort und Dateiname, instanzieren der FileHandler-Klasse sowie die Methodenaufrufe zum lesen der Datei - würde ich in separate Methoden der Klasse auslagern.


    Joar...

    ...wie gesagt: Ich habe keine Ahnung von Java Vllt. hilfts ja trotzdem weiter.

    greetz
    m.

  3. #3
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    9.409

    Standard

    Ich sehe nirgendwo ein new für filecontent.
    Devinius gefällt das.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  4. #4
    mcn
    mcn ist offline
    Reg.-Benutzer
    Reg.-Datum
    14.06.2012
    Beiträge
    39

    Standard

    S*******.

    Daran hatte ich am Anfang auch gedacht.
    Es aber verworfen. Weil ich nicht weiss ob das in Java notwendig ist.
    Isses wohl. loelz.

  5. #5
    Reg.-Benutzer Avatar von Devinius
    Reg.-Datum
    26.06.2012
    Ort
    Nähe Erfurt
    Beiträge
    4

    Standard

    Mpfh....manchmal sind die Fehler so nah
    Das new fehlt ja tatsächlich...das ist es. Jetzt meckert er nicht mehr rum.
    Danke dir Klotzkopp!

  6. #6
    Moderator Java
    Reg.-Datum
    24.07.2007
    Beiträge
    8.052

    Standard

    new wird immer benötigt, da alle Datenstrukturen in Java Objekte sind und somit der Konstruktor der Klasse für die Erzeugung im Speicher aufgerufen werden muss (abgesehen von primitiven Datentypen wie z.B. int).
    We can only see a short distance ahead, but we can see plenty there that needs to be done. (Alan Turing)
    http://flashpixx.de

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. [FIAE] Erster Versuch - Zeiterfassung
    Von rezico im Forum Abschlussprojekte
    Antworten: 44
    Letzter Beitrag: 02.02.2011, 23:27
  2. Bewerbung, mein erster Versuch. Bitte um Hilfe.
    Von deadshox im Forum Jobsuche, Bewerbung und Zeugnisse
    Antworten: 45
    Letzter Beitrag: 02.04.2009, 13:32
  3. [JAVA] NullPointerException
    Von Druid im Forum Java
    Antworten: 12
    Letzter Beitrag: 20.06.2005, 22:31
  4. Projektantrag erster Versuch...
    Von debitux im Forum Abschlussprojekte
    Antworten: 9
    Letzter Beitrag: 13.02.2004, 20:00