Pufferung in eine Datei schreiben

Marco Witter

Grünschnabel
Hallo Leute;

ich möchte meinen gepufferten abgerufenen Bodyteil der Email in einen
File schreiben, um ihn danach weiter verarbeiten zu können.
Allerdings funktioniert es nicht mit der Methode textstream.write();
Gibt es andere Möglichkeiten?

Vielen Dank für die Hilfe!

grüsse marco

Hier der Code:
Code:
if (message[i].isMimeType("text/plain")){

//Puffern
BufferedReader in = new BufferedReader(
new InputStreamReader(message[i].getInputStream()));
			  	
//in eine Datei schreiben/spiegeln
FileWriter datei=new FileWriter("Body.xml");
BufferedWriter textstream =new BufferedWriter(datei);
textstream.write(in); //hier kommt der Fehler, dass es mit Argumenten
nicht geht
 
Du kannst den BufferedReader in einer Schleife mit readLine() auslesen und die Strings die da zurückkommen in den BufferedWriter stecken.
 
Moin!

Das wäre aber nicht gerade schnell...

erstell dir besser einen StringBuffer, hänge mit append die einzelnen Zeilen an diesen StringBuffer und rufe dann nur einmal am Schluss

bw.write(myBuffer.toString());
bw.flush();

auf, damit muss deine Maschine nur einmal IO betreiben....

Gruß Tom
 
Vielen Dank!
Habe den Code siehe unten abgeändert:

Das Problem ist die Datei wird angelegt, aber es ist kein
Text in Ihr enthalten!
Bitte um Codeverbesserungen!
Mit prinln über die Konsole funktioniert es übrigens

Schon einmal danke
Code:
if (message[i].isMimeType("text/plain")){
//Puffern
BufferedReader in = new BufferedReader(
new InputStreamReader(message[i].getInputStream())); 

String line;
line=in.readLine();

FileWriter datei = new FileWriter("Body.txt");
BufferedWriter textstream =new BufferedWriter(datei);
textstream.write(line);

//Konsolenausgabe funktioniert
/*String line;
while ( (line=in.readLine()) != null )
System.out.println( line );*/
 
Hallo!

Code:
if (message[i].isMimeType("text/plain")){
try{
//Puffern
BufferedReader in = new BufferedReader(
new InputStreamReader(message[i].getInputStream())); 

StringBuffer buffer = new StringBuffer();

String line = null;

while((line = br.readLine())!=null)
    buffer.append(line+"\r\n");
}

FileWriter datei = new FileWriter("Body.txt");
BufferedWriter textstream =new BufferedWriter(datei);
textstream.write(buffer.toString());
textstream.flush();
textstream.close();


}catch(IOException ioe){
   io.printStackTrace();
}

Gruß Tom
 
Original geschrieben von Thomas Darimont
Das wäre aber nicht gerade schnell...
Macht das wirklich soviel aus ? Ich dachte die gepufferten Streams wären extra dazu da um Daten erst zu sammeln und damit die I/O-Zugriffe zu reduzieren.
Quelle: Handbuch der Java-Programmierung
 
Moin!

Code:
Version 1

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;

/**
 *
 * @author      Darimont<br>
 * @version     1.0<br>
 * Date of creation:  05.03.2004<br>
 * File:         PerformaceTest1.java<br>
 * Modifier:     Darimont<br>
 * Revision:     Revision<br>
 * State:        Germany<br>
 */

/**
 * **************************************************************************
 *
 * $Log$
 *
 * **************************************************************************
 */
public class PerformaceTest1 {

	BufferedWriter bw;
	BufferedReader br;
	FileReader fr;
	FileWriter fw;
	
	String line;
	StringBuffer buffer;
	long startTime;
	
	
	public static void main(String[] args) {
		new PerformaceTest1().doIt();
	}
	/**
	 * 
	 */
	private void doIt() {
		// TODO Auto-generated method stub
		File inFile = new File("c:/InforCar.zip");
		File outFile = new File("c:/out.dat");
		
		try {
			fr = new FileReader(inFile);
			br = new BufferedReader(fr);
			fw = new FileWriter(outFile);
			bw = new BufferedWriter(fw);
			
			startTime = System.currentTimeMillis();
			
			while((line=br.readLine() )!=null){
				bw.write(line);
			}
			bw.flush();
			bw.close();	

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(System.currentTimeMillis() - startTime);
		//Ausgabe 1923		
	}

}

Version 2

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;

/**
 *
 * @author      Darimont<br>
 * @version     1.0<br>
 * Date of creation:  05.03.2004<br>
 * File:         PerformaceTest1.java<br>
 * Modifier:     Darimont<br>
 * Revision:     Revision<br>
 * State:        Germany<br>
 */

/**
 * **************************************************************************
 *
 * $Log$
 *
 * **************************************************************************
 */
public class PerformaceTest1 {

	BufferedWriter bw;
	BufferedReader br;
	FileReader fr;
	FileWriter fw;
	
	String line;
	StringBuffer buffer;
	long startTime;
	
	
	public static void main(String[] args) {
		new PerformaceTest1().doIt();
	}
	/**
	 * 
	 */
	private void doIt() {
		// TODO Auto-generated method stub
		File inFile = new File("c:/InforCar.zip"); // 7 MB
		File outFile = new File("c:/out.dat");
		buffer = new StringBuffer();
		
		try {
			fr = new FileReader(inFile);
			br = new BufferedReader(fr);
			fw = new FileWriter(outFile);
			bw = new BufferedWriter(fw);
			
			startTime = System.currentTimeMillis();
			
			while((line=br.readLine() )!=null){
				buffer.append(line);
			}
			
			bw.write(buffer.toString());
			bw.flush();
			bw.close();	

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(System.currentTimeMillis() - startTime);
		//Ausgabe 2062
		
	}
	
	
}

Ok ich geb mich geschlagen, die variante ohne StringBuffer ist flotter ...
 
Zuletzt bearbeitet:
... aber nur wenn nicht nach jedem bw.write(....) ein bw.flush() gemacht wird...
dann erhalte ich bei dem ersten Beispiel nämlich 2713 .

Gruß Tom
 

Neue Beiträge

Zurück