PDF-Datei byteweise einlesen - Fehlerhaft

Saskia21

Mitglied
Hi Leute

Ich will eine PDF-Datei byteweise einlesen, aber wenn ich aus dem byte-Array dann wieder einer PDF-Datei erzeuge ist diese fehlerhaft und hat 0 KB.
Code:
public byte[] methode2(File file) throws IOException{
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
		int c;
		while ((c = in.read()) > -1){
			bo.write(c);
			}
		return bo.toByteArray();
	}

und in der main-Methode:
Code:
byte[] array = w2.methode2(file);
		
		FileOutputStream f = new FileOutputStream(new File("d:/lala.pdf"));
		f.write(array);
Kann mir jemand sagen, was ich vergessen habe?
Mit zip Archiven ist es übrigens das gleiche.

Gruß
 
Du darfst da kein encoding angeben. Das was du versuchst zu lesen sind binäre-Dateien und keine Plain-Text.

Versuch das:
BufferedReader in = new BufferedReader(new FileReader(file));
 
Hi
Danke für deine Antwort, leider ist die Datei immer noch nur 0 KB groß.
Kann man pdf-Dateien nicht byteweise einlesen?
 
Du musst auf jeden Fall deine ganzen Streams mal schließen, sonst wird die Datei eventuell nicht vollständig geschrieben.
 
Irgendwie macht der FileReader da Unsinn...

FileReader is meant for reading streams of characters. For reading streams of raw bytes, consider using a FileInputStream

So gehts:
Java:
public static byte[] methode2(File file) throws IOException {
	final ByteArrayOutputStream bo;
	final long length = file.length();
	if (length < Integer.MAX_VALUE) {
		bo = new ByteArrayOutputStream((int) length);
	} else {
		bo = new ByteArrayOutputStream(Integer.MAX_VALUE);
	}

	final FileInputStream in = new FileInputStream(file);
	int c;
	while ((c = in.read()) != -1) {
		bo.write(c);
	}
	in.close();
	bo.close();

	final byte[] byteArray = bo.toByteArray();

	System.out.println("File length: " + length);
	System.out.println("Byte Array length: " + byteArray.length);

	return byteArray;
}

public static void main(String[] args) throws IOException {
	File file = new File("Test.pdf");
	byte[] array = methode2(file);

	FileOutputStream f = new FileOutputStream(new File("lala.pdf"));
	f.write(array);
	f.close();
}

Musst du nur noch das ExceptionHandling ordentlich machen :)
 
Zurück