package oop.FileHandling.ByteKlassen;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
//also ich habe daten auf meinm File und ich will diese Datein lesen oder importieren
// man kann heir mit Text bearbeiten aber es ist nicht dafür richtig alternative Möglichkeit (die abstrakte klasse reader und Writer)
public class Fileinputstream {
	
	/*read() Methode:
	 * - fis.read liest aus dem File nur ein Byte aus und gibt ein Integer zurück
	 * - z.b a liest als (97) lösung als (char) casting
	 * - wenn die Methode keinen Byte lesen kann, gibt -1 zurück
	 * 
	 *read(byte [] b) Method: 
	 *	- die übernimmt array vom type byte
	 */

	public static  void main(String[] args) throws IOException {
		 FileInputStream fis = null;
		 fis = new FileInputStream("C:\\Users\\obaya\\eclipse-workspace\\OOP\\src\\oop\\FileHandling\\Test");
		 	{
			 // das ist falsch, weil ich die Aufruf der Methode ist falsch
			 while (fis.read() != -1)
				System.out.print((char)fis.read());			 
		 }
		
		 
		 //richtig!!
		 int data;
		 while((data = fis.read()) != -1)// wenn kein mehr chars gibt, ist -1
			 System.out.print((char)data);
		 
		 {
			 // read() übernimmt ein byte array
			 byte[] b = new byte[3]; // byte array
			 fis.read(b);// methode übernimmt byte array
			 String s = new String(b);//mit diesem Konstruktor gebe ich alle Inhalt aus ohne Loop
			 System.out.println(s);
		 }
		
		 
		 
		 {
			// read() übernimmt ein byte array mit dynamischen size für array
			File f = new File("C:\\Users\\obaya\\eclipse-workspace\\OOP\\src\\oop\\FileHandling\\Test");
			FileInputStream f2 = new FileInputStream(f);
			byte[] b = new byte[(int) f.length()]; //Methode gibt long zurück size soll aber int sein
			fis.read(b);// methode übernimmt byte array
			String s = new String(b);//mit diesem Konstruktor gebe ich alle Inhalte aus (ohne Loop)
			System.out.println(s);
		 }
		 
		 
		
	}
}
