Klassen Probleme beim Debuggen - Datentypkonvertierung - Speichern in Datei

Mario.Haas

Mitglied
Hallo Zusammen,

Mein Ziel ist es, eine Klasse zu schreiben, die mehrere Strings in ein Dokument schreibt und wieder auslesen kann.
Dafür verwende ich in ein String[].

Es sind die Zeilen 103, 123 sowie die Methode saveData(), die Probleme machen:
Zeile 103/123: Liefert trotz Datentypkonvertierung null zurück
saveData(): Speichert die Strings nicht in das Dokument ab.

Des weiteren wäre ich dankbar, wenn ihr mir Tipps geben könntet, wie ich Zeilenumbrüche des String[] so zu verändern, dass sie beim erneuten Einlesen wieder in den gleichen Index des String[] kommen.

Zusätzlich habe ich das Gefühl, dass die Klasse createNewFile() ihre Aufgabe nicht richtig ausführt.

Hier mal die komplette Klasse:
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * Diese Klasse speichert Variablen des Datentyps String in Doukente ab, erzeugt bei Bedarf dementsprechende Datei.
 */
public class Speichern {
	private String nameOfData;
	public int numberOfLines;
	private File data;
	private String[] stringArray;
	
	/**
	 *TODO write text
	 */
	// BUG!
	private void saveData(){
		BufferedWriter out;
		
		try {
			out = new BufferedWriter(new FileWriter(nameOfData));
			// Erste Zeile enthält die Anzahl der Zeilen
			out.write(String.valueOf(numberOfLines));
			out.newLine();
			for (int i = 0; i < numberOfLines; i++){
				out.write(stringArray[i]);
				out.newLine();
			}
			out.close();
		} catch (IOException e) {
		}
	}
		
	/**
	 * TODO write text
	 */
	private void createNewFile(){
		data = new File(nameOfData + ".txt");
	}
	
	/**
	 * TODO write text
	 * @param newNumberOfLines
	 */
	private void copyArrayWithAttributes(int newNumberOfLines){
		countLinesOfArray();
		if (!(numberOfLines == 0)) {
			String[] bufferArray = new String[numberOfLines];
			
			for (int i = 0; i < numberOfLines; i++){
				bufferArray[i] = stringArray[i];
			}
			
			stringArray = new String[newNumberOfLines];
			
			for (int i = 0; i > numberOfLines; i++){
				stringArray[i] = bufferArray[i];
			}
		}
		
		numberOfLines = newNumberOfLines;
	}
		
	/**
	 * TODO write text
	 * @return
	 */
	public boolean deleteData(){
		return data.delete();
	}
	
	/**
	 * TODO write text
	 * @return
	 */
	public int getNumberOfLinesOfArray(){
		return stringArray.length;
	}
	
	/**
	 * TODO write text
	 */
	//TODO try out
	private void countLinesOfArray(){
		numberOfLines = getNumberOfLinesOfArray();
	}
	
	/**
	 * TODO write text
	 * @return
	 */
	// BUG!
	public int getNumberOfLinesOfDocument(){
		BufferedReader in;
		
		try {
			in = new BufferedReader(new FileReader(nameOfData));
			return Integer.parseInt(in.readLine()); //TODO: bug Datentypkonvertierung
		} catch (FileNotFoundException e) {
			return -1;
		} catch (NumberFormatException e) {
			return -1;
		} catch (IOException e) {
			return -1;
		}
	}
	
	/**
	 * TODO write text
	 */
	// BUG!
	private void readFile(){
		if (! (getNumberOfLinesOfDocument() == -1)){
			BufferedReader in;
			
			try {
				in = new BufferedReader(new FileReader(nameOfData));
				numberOfLines = Integer.parseInt(in.readLine());
				stringArray = new String[numberOfLines];
				for (int i = 0; i < numberOfLines; i++){
					stringArray[i] = in.readLine();
				}
				in.close();
			} catch (FileNotFoundException e) {
			} catch (NumberFormatException e) {
			} catch (IOException e) {
			}
		}	
	}
	
	/**
	 * Appends the Array with the given String.
	 * <br> Hängt den übergebenen String an das Array an.
	 * @param stringToAppend String that is being appended <br> String, der angehängt wird
	 */
	public void appendString(String stringToAppend){
		copyArrayWithAttributes(numberOfLines+1);
		stringArray[numberOfLines-1] = stringToAppend;
		saveData();
	}
	
	/**
	 * Replaces a String at given Index of the Array.
	 * <br> Ersetzt einen String an der angegbenen Stelle des Arrays.
	 * @param replacingString String that replaces <br> String, der ersetzt
	 * @param atIndex Index of the Array <br> Stelle des Arrays
	 */
	public void replaceString(String replacingString, int atIndex){
		if ((atIndex <= numberOfLines) && (atIndex > 0)) {
			stringArray[atIndex-1] = replacingString;
			saveData();
		}
	}
	
	/**
	 * Return the Sting of the Array, that is stored at given Line.
	 * <br> Liefert den Sting des Arrays, der am eingegeben Zeile gespeichert ist.
	 * @param atIndex Line of the String <br> Zeile des Strings
	 * @return String of the Array stored at given Line <br> String des Arrays der eingegbenen Zeile
	 */
	public String getString(int atIndex){
		if (atIndex <= numberOfLines){
			return stringArray[atIndex];
		} else return null;
	}

	/**
	 * TODO write text
	 * @param newNumberOfLines
	 */
	public void setNewNumberOfLines(int newNumberOfLines){
		if ((numberOfLines < newNumberOfLines) || (numberOfLines > newNumberOfLines)) {
			copyArrayWithAttributes(newNumberOfLines);
		}
	}
	
	/**
	 * TODO write text
	 * @param newStringArray
	 */
	public void setNewStringArray(String[] newStringArray){
		stringArray = new String[newStringArray.length];
		
		for (int i = 0; i < newStringArray.length; i++){
			stringArray[i] = newStringArray[i];
		}
		numberOfLines = newStringArray.length;
	}
	
	/**
	 * TODO write text
	 * @param dataName
	 */
	public Speichern(String dataName){
		// Objekt wird beendet, sofern kein DateiName übergeben wird.
		if (dataName == null) return;
		
		nameOfData = dataName + ".txt";
		data = new File(nameOfData);
		if (data.exists()){
			readFile();
		} else {
			createNewFile();
			numberOfLines = 0;
			stringArray = new String[numberOfLines];
		}
	}
}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
das Erstellen eines File-Objektes ist keine Interaktion mit der Festplatte, was soll createNewFile() leisten?

nameOfData und data als Instanzatttibute ist gefährliche Redundanz und du machst da tatsächlich Fehler,
saveData schreibt in nameOfData, die .txt-Endung fällt weg,
ist die Datei ohne Endung auf der Festplatte vorhanden und korrekt?

entferne nameOfData, übergib das nur im Konstruktor oder set-Methode,
erstelle sofort data dazu und verwende in anderen Methoden nur data,
 

Mario.Haas

Mitglied
das Erstellen eines File-Objektes ist keine Interaktion mit der Festplatte, was soll createNewFile() leisten?
createNewFile() soll eine Datei mit den dem Namen nameOfData auf der Festplatte erstellen.

nameOfData und data als Instanzatttibute ist gefährliche Redundanz und du machst da tatsächlich Fehler,
saveData schreibt in nameOfData, die .txt-Endung fällt weg,
ist die Datei ohne Endung auf der Festplatte vorhanden und korrekt?
Mit der Änderung [JAVA=63]} else {
stringArray = new String[newNumberOfLines];
}[/code]
speichert er den ersten String (via appendString()) korrekt in die Datei (mit Endung), weitere Strings liefern eine NullPointerException in Zeile 31.

entferne nameOfData, übergib das nur im Konstruktor oder set-Methode,
erstelle sofort data dazu und verwende in anderen Methoden nur data,
Darf ich fragen, was der Hintergrund dazu ist?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> Darf ich fragen, was der Hintergrund dazu ist?
wie gesagt um zu vermeiden, dass data auf eine ganz andere Datei zeigt als der Name, mit all den ersichtlichen Problemen,

eine Information zweimal abzuspeichern hat immer Probleme bei Ungleichheit/ Änderung,
wenn es keine klaren Vorteile bringt (hier gar keine), dann ist es einfach nur falsch/ schlecht/ dumm geradezu,

------

> createNewFile() soll eine Datei mit den dem Namen nameOfData auf der Festplatte erstellen.

in der Gesamtheit gehört da einiges dazu, etwa Verzeichnisse anlegen,
wenn BufferedWriter jetzt schon geht, dann musst du eigentlich gar nichts machen, gibt aber durchaus eine File-Methode dazu
mit ziemlich ähnlichen Namen, einfach mal alle anschauen und dann auch aufrufen, nicht nur das File erstellen

----

> speichert er den ersten String (via appendString()) korrekt in die Datei (mit Endung), weitere Strings liefern eine NullPointerException in Zeile 31.

wo das else eine Rolle spielt kann ich nicht erkennen, dass Zeile 31 nach Änderungen noch aktuell ist, kann man schon bezweilfeln,
ich erkenne aktuell jedenfalls nichts mehr was ich hochdringend melden müsste,
poste aktuellen Code und alle Aufrufe einer main-Methode die zu einer Exception führen
 

Mario.Haas

Mitglied
>ich erkenne aktuell jedenfalls nichts mehr was ich hochdringend melden müsste,
>poste aktuellen Code und alle Aufrufe einer main-Methode die zu einer Exception führen

Ich hab jetzt die Integer zur Beschreibung der Zeilenzahl rausgeschmissen und greife dafür direkt auf stringArray.length bzw auf die Methode getNumberOfLinesOfDocument() zu.
So müssten die Daten eigentlich immer aktuell sein.
Des weiteren ersetze ich die Zeichen \n durch andere, falls das String[] Zeilenumbrüche enthält, damit die Strings in den gleichen Index wieder zurück kommen.

Jetzt erhalte ich beim Einlesen einer Datei eine NullPointerException in Zeile 67.
Ansonsten funktionieren alle anderen Funktionen.

Zum debuggen (eher ausprobieren) nutze ich BlueJ, erstelle den Code allerdings in eclipse.
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * Diese Klasse speichert Variablen des Datentyps Stringin Doukente ab, erzeugt bei Bedarf dementsprechende Datei.
 */
public class Speichern {
	private File data;
	private String[] stringArray;
	private String[] stringArrayToSave;
	private static final char LineSeparatorOfSystem = '\n';
	private static final char LineSeparatorOfDocument = 9;
	
	/**
	 * Converts stringArray by replacing \n
	 * <br> Konvertiert stringArray, indem es \n ersetz
	 */
	private void convertStringArrayForSaving(){
		// working with StringBuffer
		StringBuffer bufferString = new StringBuffer();
		stringArrayToSave = new String[stringArray.length];
		
		// Index of Array; going line for line
		for (int i = 0; i < stringArray.length; i++){
			// clean bufferString
			bufferString.setLength(0);
			
			// reading each char of String
			for (int j = 0; j < stringArray[i].length(); j ++) {
				// adding normal char
				if (stringArray[i].charAt(j) != LineSeparatorOfSystem){
					bufferString.append(stringArray[i].charAt(j));
				} else {
					//replacing LineSeparatorOfSystem
					bufferString.append(LineSeparatorOfDocument);
				}
			}
			
			// saving stringArrayToSave
			stringArrayToSave[i] = bufferString.toString();
		}
		bufferString = null;
	}
	
	/**
	 * Converts stringArrayToSave by replacing LineSeparatorOfDocument
	 * <br> Konvertiert stringArrayToSave, indem es LineSeparatorOfDocument ersetzt
	 */
	private void convertStringArrayForArray(){
		// init variables
		StringBuffer bufferString = new StringBuffer();
		stringArray = new String[stringArrayToSave.length];
		
		// going line for line
		for (int i = 0; i < stringArrayToSave.length; i++) {
			// cleaning bufferstring
			bufferString.setLength(0);
			
			// reading each char of String
			for (int j = 0; j < stringArrayToSave[i].length(); j++) {
				// adding normal char
				if (stringArray[i].charAt(j) != LineSeparatorOfDocument){
					bufferString.append(stringArrayToSave[i].charAt(j));
				} else {
					// replacig LineSeparatorOfDocument
					bufferString.append(LineSeparatorOfSystem);
				}
			}
			// saving stringArray
			stringArray[i] = bufferString.toString();			
		}
	}
	
	/**
	 * Writes the string[] into the file on HD.
	 * <br> schreibt das sting[] in die Datei auf der Festplatte.
	 */
	private void saveData(){
		convertStringArrayForSaving();
		BufferedWriter out;
		
		try {
			out = new BufferedWriter(new FileWriter(data));
			// Erste Zeile enthält die Anzahl der Zeilen
			out.write(String.valueOf(stringArrayToSave.length));
			out.newLine();
			for (int i = 0; i < stringArrayToSave.length; i++){
				out.write(stringArrayToSave[i]);
				out.newLine();
			}
			out.flush();
			out.close();
			} catch (IOException e) {
		}
	}
	

	/**
	 * @return stringArray
	 */
	public String[] getStringArray(){
		return stringArray;
		
	}
	
	/**
	 * Copies the array with a new number of lines. If it should create less lines, it deletes affected Strings.
	 * Does not save the file.
	 * <br><br> Kopiert das Array mit der neuen Anzahl an Zeilen. Sofern es weniger Zeilen enthalten soll, werden die betroffenen
	 * Strings gelöscht. Sichert nicht das Dokument.
	 * @param newNumberOfLines new number of lines <br> neue Anzahl der Zeilen
	 */
	private void copyArrayWithAttributes(int newNumberOfLines){
		// if the array has more than 0 lines
		if ((stringArray.length > 0)) {
			
			// declare a buffering Array
			String[] bufferArray = new String[stringArray.length];
			
			// coping the Strings of the old Array into the new one
			for (int i = 0; i < stringArray.length; i++){
				bufferArray[i] = stringArray[i];
			}
			
			// redeclare the new stringArray
			stringArray = new String[newNumberOfLines];
			
			// copy the Strings of the buffering Array into the redeclared stringArray
			for (int i = 0; i < bufferArray.length; i++){
				stringArray[i] = bufferArray[i];
			}
		} else 
		
		// if the array has 0 lines, the new Array can been redeclared without coping Strings
		if (stringArray.length == 0) {
			stringArray = new String[newNumberOfLines];
		}		
	}
		
	
	/**
	 * Deletes the File.
	 * <br> ATTENTION: This objekt is not usable after opening this method. This objekt has to be released. 
	 * <br><br> Löscht die Datei.
	 * <br> ACHTUNG: Dieses Objekt ist nach Aufruf dieser Methode nicht benutzbar. Dieses Objekt muss gelöscht werden.
	 * @return true, if deleting has been successfully <br>true, wenn das löschen erfolgreich gewesen ist.
	 * <br> false, if deleting was not successful <br> false, wenn das Löschen nicht erfolgreich gewesen ist.
	 */
	public boolean deleteData(){
		return data.delete();
	}
	
	
	/**
	 * @return Number of lines that the string[] currently has.
	 * <br> Anzahl der Zeilen, die das string[] im Moment hat.
	 */
	public int getNumberOfLinesOfArray(){
		return stringArray.length;
	}
	
	
	/**
	 * @return Number of lines that the document currently has.
	 * <br> Anzahl der Zeilen, die das Dokument im Moment hat.
	 */
	public int getNumberOfLinesOfDocument(){
		BufferedReader in;
		
		// retruns -1 if something went wrong (eg. file not found)
		try {
			in = new BufferedReader(new FileReader(data));
			return Integer.parseInt(in.readLine());
		} catch (FileNotFoundException e) {
			return -1;
		} catch (NumberFormatException e) {
			return -1;
		} catch (IOException e) {
			return -1;
		}
	}
	
	
	/**
	 * TODO write text
	 */
	private void readFile(){
		// checking consistency of document
		if ((getNumberOfLinesOfDocument() != -1)){
			BufferedReader in;
			
			try {
				in = new BufferedReader(new FileReader(data));
				stringArrayToSave = new String[Integer.parseInt(in.readLine())];
				for (int i = 0; i < stringArrayToSave.length; i++){
					stringArrayToSave[i] = in.readLine();
				}
				in.close();
				
				convertStringArrayForArray();
			} catch (FileNotFoundException e) {
			} catch (NumberFormatException e) {
			} catch (IOException e) {
			}
		}	
	}
	
	/**
	 * Appends the Array with the given String.
	 * <br> Hängt den übergebenen String an das Array an.
	 * @param stringToAppend String that is being appended <br> String, der angehängt wird
	 */
	public void appendString(String stringToAppend){
		copyArrayWithAttributes(stringArray.length+1);
		stringArray[stringArray.length-1] = stringToAppend;
		saveData();
	}
	

	/**
	 * Replaces a String at given Index of the Array.
	 * <br> Ersetzt einen String an der angegbenen Stelle des Arrays.
	 * @param replacingString String that replaces <br> String, der ersetzt
	 * @param atIndex Index of the Array <br> Stelle des Arrays
	 */
	public void replaceString(String replacingString, int atIndex){
		if ((atIndex <= stringArray.length) && (atIndex > 0)) {
			stringArray[atIndex-1] = replacingString;
			saveData();
		}
	}
	
	
	/**
	 * Return the Sting of the Array, that is stored at given Line.
	 * <br> Liefert den Sting des Arrays, der am eingegeben Zeile gespeichert ist.
	 * @param atIndex Line of the String <br> Zeile des Strings
	 * @return String of the Array stored at given Line <br> String des Arrays der eingegbenen Zeile
	 */
	public String getString(int atIndex){
		atIndex--;
		if (atIndex <= stringArray.length){
			return stringArray[atIndex];
		} else return null;
	}


	/**
	 * TODO write text
	 * @param newNumberOfLines
	 */
	public void setNewNumberOfLines(int newNumberOfLines){
		if (stringArray.length != newNumberOfLines) {
			copyArrayWithAttributes(newNumberOfLines);
		}
	}
	
	/**
	 * TODO write text
	 * @param newStringArray
	 */
	public void setNewStringArray(String[] newStringArray){
		stringArray = new String[newStringArray.length];
		
		for (int i = 0; i < newStringArray.length; i++){
			stringArray[i] = newStringArray[i];
		}
		saveData();
	}
	
	/**
	 * TODO write text
	 * @param dataName
	 */
	public Speichern(String dataName){
		// Objekt wird beendet, sofern kein DateiName übergeben wird.
		if (dataName == null) return;
		
		data = new File(dataName + ".txt");
		if (data.exists()){
			readFile();
		} else {
			stringArray = new String[0];
		}
	}
}
 
S

SlaterB

Gast
ohne main-Methode und ohne Datei kann ich das Programm nicht ausführen,

solange kann ich nur allgemeine Tipps geben:
ist Zeile 67 wirklich die hier angegebene
> if (stringArray.charAt(j) != LineSeparatorOfDocument){
?
schwer zu glauben da das stringArray in der Methode selber definiert wird,
einen Test an dieser Stelle vorzuschlagen
> if (stringArray != null)
usw., verbietet sich fast

bzw. es verbietet sich alles, nur die Frage ob du in der richtigen Zeile bist, kann bleiben?

-----

wäre es ein vollständiges Programm inklusive Datei (Posting Anhang), hätte ich es an dieser Stelle schon vollständig testen könen,
statt nur nach einer Zeilennummer zu fragen..

---

> Zum debuggen (eher ausprobieren) nutze ich BlueJ, erstelle den Code allerdings in eclipse.

na Glückwunsch, zum Testen meiner Modellautos nehme ich auch die mit Säure gefüllte Badewanne ;)
 

Mario.Haas

Mitglied
>ohne main-Methode und ohne Datei kann ich das Programm nicht ausführen,
Ich dachte, dass die letzte Methode (Speichern()) das gleiche in der OOP übernimmt …

>ist Zeile 67 wirklich die hier angegebene
>> if (stringArray.charAt(j) != LineSeparatorOfDocument){
>[…]
Da war das Problem, dass ich vergessen habe, aus stringArray stringArrayToSave zu machen.

>> Zum debuggen (eher ausprobieren) nutze ich BlueJ, erstelle den Code allerdings in eclipse.
>na Glückwunsch, zum Testen meiner Modellautos nehme ich auch die mit Säure gefüllte Badewanne

Da kann ich wenigstens die ganzen Methoden ausprobieren. Die Klasse soll ja nicht als eigenständiges Programm laufen, sondern nur als Art API Verwendung finden ;)

Danke dir nochmals!

Und hier der vollständige Code:
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * This class saves Strings in a document and allows to read them from the harddrive. You can use them as a String[].
 * <br><br> Diese Klasse speichert Strings in ein Dokument und ermöglicht das Lesen dieser von Festplatte.
 * Sie können sie als String[] verwenden.
 */
public class Speichern {
	private File data;
	private String[] stringArray;
	private String[] stringArrayToSave;
	private static final char LineSeparatorOfSystem = '\n';
	private static final char LineSeparatorOfDocument = 9;
	
	
	/**
	 * Converts stringArray by replacing \n
	 * <br><br> Konvertiert stringArray, indem es \n ersetz
	 */
	private void convertStringArrayForSaving(){
		// working with StringBuffer
		StringBuffer bufferString = new StringBuffer();
		stringArrayToSave = new String[stringArray.length];
		
		// Index of Array; going line for line
		for (int i = 0; i < stringArray.length; i++){
			// clean bufferString
			bufferString.setLength(0);
			
			// reading each char of String
			for (int j = 0; j < stringArray[i].length(); j ++) {
				// adding normal char
				if (stringArray[i].charAt(j) != LineSeparatorOfSystem){
					bufferString.append(stringArray[i].charAt(j));
				} else {
					//replacing LineSeparatorOfSystem
					bufferString.append(LineSeparatorOfDocument);
				}
			}
			// saving stringArrayToSave
			stringArrayToSave[i] = bufferString.toString();
		}
		bufferString = null;
	}
	
	/**
	 * Converts stringArrayToSave by replacing LineSeparatorOfDocument
	 * <br><br> Konvertiert stringArrayToSave, indem es LineSeparatorOfDocument ersetzt
	 */
	private void convertStringArrayForArray(){
		// init variables
		StringBuffer bufferString = new StringBuffer();
		stringArray = new String[stringArrayToSave.length];
		
		// going line for line
		for (int i = 0; i < stringArrayToSave.length; i++) {
			// cleaning bufferstring
			bufferString.setLength(0);
			
			// reading each char of String
			for (int j = 0; j < stringArrayToSave[i].length(); j++) {
				// adding normal char
				if (stringArrayToSave[i].charAt(j) != LineSeparatorOfDocument){
					bufferString.append(stringArrayToSave[i].charAt(j));
				} else {
					// replacig LineSeparatorOfDocument
					bufferString.append(LineSeparatorOfSystem);
				}
			}
			// saving stringArray
			stringArray[i] = bufferString.toString();			
		}
		bufferString = null;
	}
	
	/**
	 * Writes the string[] into the file on HD.
	 * <br><br> schreibt das sting[] in die Datei auf der Festplatte.
	 */
	private void saveData(){
		convertStringArrayForSaving();
		BufferedWriter out;
		
		try {
			out = new BufferedWriter(new FileWriter(data));
			// Erste Zeile enthält die Anzahl der Zeilen
			out.write(String.valueOf(stringArrayToSave.length));
			out.newLine();
			for (int i = 0; i < stringArrayToSave.length; i++){
				out.write(stringArrayToSave[i]);
				out.newLine();
			}
			out.flush();
			out.close();
			} catch (IOException e) {}
	}
	

	/**
	 * @return stringArray
	 */
	public String[] getStringArray(){
		return stringArray;
	}
	
	/**
	 * Copies the array with a new number of lines. If it should create less lines, it deletes affected Strings.
	 * Does not save the file.
	 * <br><br> Kopiert das Array mit der neuen Anzahl an Zeilen. Sofern es weniger Zeilen enthalten soll, werden die betroffenen
	 * Strings gelöscht. Sichert nicht das Dokument.
	 * @param newNumberOfLines new number of lines <br> neue Anzahl der Zeilen
	 */
	private void copyArrayWithAttributes(int newNumberOfLines){
		// if the array has more than 0 lines
		if ((stringArray.length > 0)) {
			
			// declare a buffering Array
			String[] bufferArray = new String[stringArray.length];
			
			// coping the Strings of the old Array into the new one
			for (int i = 0; i < stringArray.length; i++){
				bufferArray[i] = stringArray[i];
			}
			
			// redeclare the new stringArray
			stringArray = new String[newNumberOfLines];
			
			// copy the Strings of the buffering Array into the redeclared stringArray
			for (int i = 0; i < bufferArray.length; i++){
				stringArray[i] = bufferArray[i];
			}
		} else 
		
		// if the array has 0 lines, the new Array can been redeclared without coping Strings
		if (stringArray.length == 0) {
			stringArray = new String[newNumberOfLines];
		}		
	}
		
	
	/**
	 * Deletes the File.
	 * <br> ATTENTION: This objekt is not usable after opening this method. This objekt has to be released. 
	 * <br><br> Löscht die Datei.
	 * <br> ACHTUNG: Dieses Objekt ist nach Aufruf dieser Methode nicht benutzbar. Dieses Objekt muss gelöscht werden.
	 * @return true, if deleting has been successfully <br>true, wenn das löschen erfolgreich gewesen ist.
	 * <br><br> false, if deleting was not successful <br> false, wenn das Löschen nicht erfolgreich gewesen ist.
	 */
	public boolean deleteData(){
		return data.delete();
	}
	
	
	/**
	 * @return Number of lines that the string[] currently has.
	 * <br><br> Anzahl der Zeilen, die das string[] im Moment hat.
	 */
	public int getNumberOfLinesOfArray(){
		return stringArray.length;
	}
	
	
	/**
	 * @return Number of lines that the document currently has.
	 * <br><br> Anzahl der Zeilen, die das Dokument im Moment hat.
	 */
	public int getNumberOfLinesOfDocument(){
		BufferedReader in;
		
		// retruns -1 if something went wrong (eg. file not found)
		try {
			in = new BufferedReader(new FileReader(data));
			return Integer.parseInt(in.readLine());
		} catch (FileNotFoundException e) {
			return -1;
		} catch (NumberFormatException e) {
			return -1;
		} catch (IOException e) {
			return -1;
		}
	}
	
	
	/**
	 * Reading the file from harddrive. If file doesn't exist, it will do nothing.
	 * <br><br> Lese die Datei von Festplatte. Wenn die Datei nicht existiert, wird nichts gemacht.
	 */
	private void readFile(){
		// checking consistency of document
		if ((getNumberOfLinesOfDocument() != -1)){
			BufferedReader in;
			
			try {
				in = new BufferedReader(new FileReader(data));
				stringArrayToSave = new String[Integer.parseInt(in.readLine())];
				for (int i = 0; i < stringArrayToSave.length; i++){
					stringArrayToSave[i] = in.readLine();
				}
				in.close();
				
				convertStringArrayForArray();
			} catch (FileNotFoundException e) {} 
			catch (NumberFormatException e) {}
			catch (IOException e) {}
		}	
	}
	
	/**
	 * Appends the Array with the given String.
	 * <br><br> Hängt den übergebenen String an das Array an.
	 * @param stringToAppend String that is being appended <br> String, der angehängt wird
	 */
	public void appendString(String stringToAppend){
		copyArrayWithAttributes(stringArray.length+1);
		stringArray[stringArray.length-1] = stringToAppend;
		saveData();
	}
	

	/**
	 * Replaces a String at given Index of the Array.
	 * <br><br> Ersetzt einen String an der angegbenen Stelle des Arrays.
	 * @param replacingString String that replaces <br> String, der ersetzt
	 * @param atIndex Index of the Array <br> Stelle des Arrays
	 */
	public void replaceString(String replacingString, int atIndex){
		if ((atIndex <= stringArray.length) && (atIndex > 0)) {
			stringArray[atIndex-1] = replacingString;
			saveData();
		}
	}
	
	
	/**
	 * Return the Sting of the Array, that is stored at given Line. Returns null if line doesn't exists.
	 * <br><br> Liefert den Sting des Arrays, der am eingegeben Zeile gespeichert ist.
	 * Liefert null zurück, wenn die Datei nicht existiert.
	 * @param atIndex Line of the String <br> Zeile des Strings
	 * @return String of the Array stored at given Line <br> String des Arrays der eingegbenen Zeile
	 */
	public String getString(int atIndex){
		atIndex--;
		if (atIndex <= stringArray.length){
			return stringArray[atIndex];
		} else return null;
	}


	/**
	 * Set new number of lines of String[]. <br> ATTENTION: Does not write data on HD.
	 * <br><br> Lege die neue Anzahl des String[] fest.<br> ACHTUNG: Speichert keine Daten auf Festplatte.
	 * @param newNumberOfLines
	 */
	public void setNewNumberOfLines(int newNumberOfLines){
		if (stringArray.length != newNumberOfLines) {
			copyArrayWithAttributes(newNumberOfLines);
		}
	}
	
	/**
	 * Hand over new String[].<br><br> Übergebe neues String[].
	 * @param newStringArray
	 */
	public void setNewStringArray(String[] newStringArray){
		stringArray = new String[newStringArray.length];
		
		for (int i = 0; i < newStringArray.length; i++){
			stringArray[i] = newStringArray[i];
		}
		saveData();
	}
	
	/**
	 * Initialise objekt. Automatically reading potentially existing file and storing it into a String[].
	 * <br><br> Initialisiere Objekt. Ließt automatisch Datei aus, wenn sie existiert, und speichert diese in ein String[]
	 * @param dataName Name of file.<br>Name der Datei.
	 */
	public Speichern(String dataName){
		// Objekt wird beendet, sofern kein DateiName übergeben wird.
		if (dataName == null) return;
		
		data = new File(dataName + ".txt");
		if (data.exists()){
			readFile();
		} else {
			stringArray = new String[0];
		}
	}
}
 
S

SlaterB

Gast
> Ich dachte, dass die letzte Methode (Speichern()) das gleiche in der OOP übernimmt …

wenn man sie erstmal findet,
auch das, allein den ersten Aufruf, erledigt die main als Helfer bestens
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
M Erste Schritte Probleme beim Verknüpfen von Methoden Java Basics - Anfänger-Themen 15
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M OOP Probleme beim Funktionsaufruf, Java OpenCV Java Basics - Anfänger-Themen 0
X Probleme beim rekursiven Durchsuchen von Verzeichnissen Java Basics - Anfänger-Themen 1
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
A LinkedList: Probleme beim Auslesen Java Basics - Anfänger-Themen 2
F Probleme beim Übersetzen Java Basics - Anfänger-Themen 7
O Probleme beim import von Projekten in Eclipse Java Basics - Anfänger-Themen 7
C OOP Probleme beim Addieren von Arrays Java Basics - Anfänger-Themen 4
N Probleme beim entfernen eines JPanels Java Basics - Anfänger-Themen 4
J Probleme beim JRadioButton Java Basics - Anfänger-Themen 2
S Klasse properties - Probleme beim umwandeln Java Basics - Anfänger-Themen 3
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
C Probleme beim Array Java Basics - Anfänger-Themen 6
G Probleme beim HTML auslesen Java Basics - Anfänger-Themen 6
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
T Probleme beim casten Java Basics - Anfänger-Themen 9
C Input/Output Probleme beim .jar erstellen Java Basics - Anfänger-Themen 5
W Probleme beim Wiedereinstieg Java Basics - Anfänger-Themen 25
P Interpreter-Fehler Probleme beim Ausführen einer Jar Datei Java Basics - Anfänger-Themen 2
F MVC -> Probleme beim Controller Java Basics - Anfänger-Themen 6
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
F Probleme beim umwandeln von String in Int Java Basics - Anfänger-Themen 10
M Kontaktbuch - Probleme beim Input Java Basics - Anfänger-Themen 3
H Probleme beim erzeugen einer Headerdatei mit javah Java Basics - Anfänger-Themen 3
T Interpreter-Fehler Probleme beim .jar ausführen mit JRE 64bit Java Basics - Anfänger-Themen 9
M Probleme beim Beenden eines Threads Java Basics - Anfänger-Themen 25
A Probleme beim erstellen einer lauffähigen jar Java Basics - Anfänger-Themen 3
A Probleme beim IntervallCheck Java Basics - Anfänger-Themen 4
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
R Probleme mit NullPointer beim Mp3 abspielen (JMF) Java Basics - Anfänger-Themen 21
I Probleme beim Laden einer .gif-Datei. Java Basics - Anfänger-Themen 8
I Probleme beim Laden eins BufferedImage Java Basics - Anfänger-Themen 8
Sebi Probleme beim Kompilieren Java Basics - Anfänger-Themen 11
I Probleme beim adden von Elementen in einer ArrayList Java Basics - Anfänger-Themen 10
C Probleme beim casten und Objekt zugriff Java Basics - Anfänger-Themen 12
L Probleme beim Ausführen des Programms Java Basics - Anfänger-Themen 9
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
S Probleme beim Umwandeln von Long nach Int Java Basics - Anfänger-Themen 4
G Probleme beim Zufügen eines JLabels Java Basics - Anfänger-Themen 18
M Probleme beim Jar erstellen Java Basics - Anfänger-Themen 7
M Probleme beim Objekzugriff auf andere Klasse: NullPointerExc Java Basics - Anfänger-Themen 5
I Probleme beim Einrichten von Java (PATH-Veriable) Java Basics - Anfänger-Themen 4
A Memory Probleme beim Laden von thumbnails Java Basics - Anfänger-Themen 3
G Probleme beim Login (Webservice) Java Basics - Anfänger-Themen 4
B Probleme beim Kompilieren. Java Basics - Anfänger-Themen 12
M probleme beim parsen Java Basics - Anfänger-Themen 7
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
M probleme beim applet einbinden Java Basics - Anfänger-Themen 7
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
R Probleme beim umwandeln eines String zu einem Int Wert Java Basics - Anfänger-Themen 3
M Probleme beim Datei auslesen Java Basics - Anfänger-Themen 6
M Probleme beim Compileren Java Basics - Anfänger-Themen 29
I Probleme beim ausführen des Programms Java Basics - Anfänger-Themen 6
kulturfenster Probleme beim Erstellen von Objekten Java Basics - Anfänger-Themen 15
kulturfenster Probleme beim Zeichnen einer Geraden Java Basics - Anfänger-Themen 8
S Probleme beim Java Kompilieren + ausführen Java Basics - Anfänger-Themen 6
M probleme beim kompilieren / übersetzen ! Systemeinstellung ? Java Basics - Anfänger-Themen 5
I Probleme beim Ausführen von Anwendungen Java Basics - Anfänger-Themen 2
S Probleme mit Datentyp beim Einlesen Java Basics - Anfänger-Themen 4
I java - probleme beim complimieren Java Basics - Anfänger-Themen 4
L Probleme beim ersten JavaProgramm! Java Basics - Anfänger-Themen 4
P Probleme beim Exportieren einer jar datei Java Basics - Anfänger-Themen 8
M Probleme beim Strich(e) zwichen Java Basics - Anfänger-Themen 3
M Probleme beim Drucken Java Basics - Anfänger-Themen 4
M Probleme beim Zuweisen eines Arbeitsverzeichnis Java Basics - Anfänger-Themen 2
A Probleme beim char-Vergleich! Java Basics - Anfänger-Themen 9
G Probleme beim Compilieren Java Basics - Anfänger-Themen 6
J Probleme beim Vererben Java Basics - Anfänger-Themen 2
B Probleme beim Dateien auslesen Java Basics - Anfänger-Themen 12
C Probleme beim overloaden. Java Basics - Anfänger-Themen 2
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
X probleme beim import Java Basics - Anfänger-Themen 3
S Probleme beim Füllen einer HashMap Java Basics - Anfänger-Themen 15
K Probleme beim Einstieg Java Basics - Anfänger-Themen 2
I Probleme beim Ansprechen eines Arrays Java Basics - Anfänger-Themen 12
T Probleme beim Einlesen eines Strings Java Basics - Anfänger-Themen 3
K Neuronales Netz in Java und Probleme beim Konfigurieren Java Basics - Anfänger-Themen 2
N Probleme beim generieren von Objekten Java Basics - Anfänger-Themen 2
G Unknown Source Probleme beim Starten des Prgramms Java Basics - Anfänger-Themen 2
J probleme beim wieder aufruf Java Basics - Anfänger-Themen 2
J Probleme beim Erstellen eines Programms Java Basics - Anfänger-Themen 5
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben