# Daten in einer Datei überschreiben



## tritko1 (17. Jan 2007)

Ich möchte gerne die Daten, die vorher in dieser Datei abgelegt wurden, überschreiben?

Habe schon etwas programmiert, aber er hängt die Daten hinten wieder an, anstatt
zu überschreiben...

Code:



```
private void write(String data[]) throws IOException{
		
		
		StringBuffer sb = new StringBuffer();
		BufferedWriter out = new BufferedWriter( new FileWriter( this.path,true));
		FileReader reader=new FileReader(this.path);
			
		for(i=0;i <= data.length-1;i++ ){
			sb.append(data[i]); 
			sb.append(delimiter);
		}
		out.write(sb.toString());
		out.newLine();
		out.close();
	}
```


Danke


----------



## Wildcard (17. Jan 2007)

```
BufferedWriter out = new BufferedWriter( new FileWriter( this.path,false));
```
Einfach mal API lesen...


----------



## EOB (17. Jan 2007)

aus irgendeinem grund hab ich das frueher auch nie gemacht mit der api. ich dachte immer, da steht ja eh keine hilfe drinne. also hab ich nie drin gelesen. aber wenn an das erstmal gemacht hat, kann mans nicht mehr lassen  :shock:   . hilft wirklich immer wieder

gruesse


----------



## tritko1 (17. Jan 2007)

Wenn ich für 


```
BufferedWriter out = new BufferedWriter( new FileWriter( this.path,false));
```


den Code benutze


```
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(this.path)));
```


benutze, dann bekomme ich nur einen Teil ausgegeben (1 Zeile, statt  9 Zeilen). Das ich das erste nicht nehmen darf, habe ich verstanden.


----------



## Wildcard (17. Jan 2007)

tritko1 hat gesagt.:
			
		

> Das ich das erste nicht nehmen darf, habe ich verstanden.


Huch?
Natürlich darfst du das nehmen  :shock:


----------



## tritko1 (17. Jan 2007)

Nehmen darf ich es, aber er gibt mir was falsches aus....

Wenn ich


```
System.out.println (sb.toString())
```


ausgebe, dann gibt er mir 9 Zeilen aus, aber wenn ich in die Datei
schreibe 


```
out.write(sb.toString());
```


Dann gibt er mir nur eine Zeile aus. Woran liegt das denn?

Danke


----------



## Wildcard (17. Jan 2007)

Falscher Zeilenumbruch?


----------



## tritko1 (17. Jan 2007)

Aber vorher hat es mit dem Code 


```
BufferedWriter out = new BufferedWriter( new FileWriter( this.path,false));
```


geklappt, außer das beim 2. Aufruf dieser Methode die Daten an das Ende der anderen
Daten angefügt wurde - die alten Daten sollen von den neuen Daten überschrieben werden.


----------



## Wildcard (17. Jan 2007)

Mit dem Code hat er die Daten sicher nicht angehängt.


----------



## tritko1 (17. Jan 2007)

Doch, das hat er.

Kann Dir auch nur das sagen, was 
ich sehe.


----------



## Wildcard (17. Jan 2007)

Dann hast du diesen Writer erstellt und mit einem anderen geschrieben oder so.
Wenn du false im Konstruktor übergibst wird die Datei überschrieben.


----------



## tritko1 (18. Jan 2007)

Ich schicke Dir mal den Quellcode: 

Quellcode in Main


```
Exportdata testex = new Exportdata();
		testex.setExportinfo(lagerpath, ";");
		try {
			testex.export(allData);
			System.out.println("Daten sind Exportiert worden!");
			
	 	} catch (IOException e) {
			e.printStackTrace();
		}
```


Klasse Exportdata


```
public class Exportdata {
	private String delimiter = "";
	private String path = "";
	int i;
	
	public void setExportinfo(String path, String delimiter ){
		this.delimiter = delimiter;
		this.path = path;
	}
	
	public void export(ArrayList exportdata) throws IOException{
		
		Iterator it = exportdata.iterator();
		while(it.hasNext()){
			write( (String[]) it.next());
		}
	}
	/* Hier muss der Text überschrieben werden.
	 * Der Text wird immer hintendran gehängt.
	 */
	
	private void write(String data[]) throws IOException{
		
		StringBuffer sb = new StringBuffer();
		FileWriter fw = new FileWriter(this.path, true);
		BufferedWriter out = new BufferedWriter(fw);
		//BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(this.path)));
	
		for(i=0;i <= data.length-1;i++ ){
			sb.append(data[i]); 
			sb.append(delimiter);
			
		}
		/* Hier muss der Text überschrieben werden.
		 * Der Text wird immer hintendran gehängt.
		 */
		out.write(sb.toString());
		out.newLine();
		out.close();
	}
}
```


Was meinst du?


----------



## Der Müde Joe (18. Jan 2007)

FileWriter fw = new FileWriter(this.path, true); 

VS.

new FileWriter( this.path,false));

Zitat Wildcard:
Wenn du false im Konstruktor übergibst wird die Datei überschrieben.


----------



## tritko1 (18. Jan 2007)

OK, danke nochmal


----------

