# txtDatei nicht zeilenweise, sondern blockweise einlesen



## Virchow (2. Jun 2005)

Weiss jemand, wie das ungefähr geht?
Danke


----------



## Jockel (2. Jun 2005)

Was verstehst du denn unter blockweise?


----------



## Virchow (2. Jun 2005)

So wurde es zeilenweise eingelesen, zB


```
public void Einl (String datei) {
	        try {
	            String zeile;

	            
	            File eingabeDatei = new File(datei);
	            FileReader eingabeStrom = new FileReader(eingabeDatei);
	            BufferedReader eingabe = new BufferedReader(eingabeStrom);
	            PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(datei+"zzz"))); 
	            
	           // System.out.println(eingabe.readLine()+"");
	            while ((zeile = eingabe.readLine()) != null)
	            {
                   // System.out.println(zeile+"");
                    
	            	//findBlocks();
	            	writer.print(zeile+"");
                    writer.println();
                    
	            }
	        //writer.print(zeile);
	            
	        writer.close(); 

	        System.out.println("Datei zeilenweise eingelesen/gespeichert");
```


Aber ich brauche die Möglichkeit, den Ihnalt der ganzen Datei zu analysieren und nicht einer jeweils eingelesenen Zeile. Deswegen passt die obige Technologie nicht. 
blockweise= man liest gleich einen Abschnitt ab (oder gleich die gesamte Datei)

Danke!


----------



## Hansdampf (2. Jun 2005)

```
public static byte[] bytesFromFile(File f){
     byte[] c=null;
     try{
         FileInputStream fis=new FileInputStream(f);
         c=new byte[fis.available()];
        fis.read(c);
        fis.close();
       }catch(Exception e){e.printStackTrace();}
      return c;
   }
```

vielleicht hilft es ja. Jetzt hast Du Deinen Block.


----------



## Sky (2. Jun 2005)

Du kannst zeilenweise einlesen und anstatt die Zeile zu analysieren kannst Du die Zeile in einen StringBuffer stecken und diesen dann nach dem Einlesen analysieren.

Außerdem stellt der BufferedReader auch die Methode
	
	
	
	





```
public int read(char[] cbuf, int off, int len)
```
zur Verfügung, mit der Du die Blockgröße selbst definieren kannst.


----------



## Virchow (3. Jun 2005)

Vielen Dank, Herrschaften!

Ich probiere es und melde mich dann.

Gruss,
Alexey


----------



## Virchow (3. Jun 2005)

Hat funktioniert, Danke!

Nun.. Bin ich etwas perplex, Das Einlesen der Datei brauche ich eigentlich um die zu analysieren und einige Blöcke nach bestimmten Kriterien rausfiltern zu können...
Wie könnte ich in den Funktionskörper der Hansdampfs Funktion (BytesFromFile) die Möglichkeit einbauen, zB zu sehen, was in der eingelesenen Datei meinetwegen in der Zeile 3562 und Position 54 für ein Symbol steht....  Oder, zB, dieses Symbol auf die Konsole zu geben?

Ich habe versucht Variable c auf String zu casten,  kommt natürlich nur Quatsch raus.

Danke im Voraus,
Alexey


----------



## Hansdampf (3. Jun 2005)

nicht casten sondern new String(byte[]);

dannn kannst Du die einzelnen Zeichen durchgehen und bei
Character.LINE_SEPARATOR kommt ne neue Zeile. (glaube ich zumindest)


----------



## Sky (3. Jun 2005)

Virchow hat gesagt.:
			
		

> Ich habe versucht Variable c auf String zu casten,  kommt natürlich nur Quatsch raus.


 API: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#String(byte[])
[edit by stevg] Hab mal die URL editiert der hat ein paar Probleme mit der Raute.


----------



## Virchow (3. Jun 2005)

Danke....

Ich habe nicht ganz verstanden, wo ich mir diesen Constructor hinstecken soll  Aber ich versuche es herauszufinden.
Das Leben ist schwer.

Gruss!


----------



## mic_checker (3. Jun 2005)

na da wo du versuchen willst aus dem array ein string zu machen...wo ist das prob? oder weisst du nicht wie du es aufrufen sollst?


----------



## Sky (3. Jun 2005)

Virchow hat gesagt.:
			
		

> Danke....
> 
> Ich habe nicht ganz verstanden, wo ich mir diesen Constructor hinstecken soll  Aber ich versuche es herauszufinden.
> Das Leben ist schwer.
> ...


Du wolltest 'c' casten nach String und hast gemerkt, das es nicht geht, aber 
	
	
	
	





```
String s = new String(c);
```
 geht


----------



## Wildcard (3. Jun 2005)

```
String s = String.valueOf(c);
```
  :wink:


----------



## Sky (3. Jun 2005)

Wildcard hat gesagt.:
			
		

> ```
> String s = String.valueOf(c);
> ```
> :wink:


Das würde ich mir nochmal überlegen: 
	
	
	
	





```
byte[] c = "abc".getBytes();
    System.out.println("String.valueOf(c)="+String.valueOf(c));
    System.out.println("new String(c)="+new String(c));

    // Ausgabe:
    // String.valueOf(c)=[B@15e83f9
    // new String(c)=abc
```


----------



## Wildcard (3. Jun 2005)

@sky80
Ok, nächstes mal lese ich mir den Thread ganz durch. Dachte 'c' ist ein char...


----------



## Sky (3. Jun 2005)

Wildcard hat gesagt.:
			
		

> @sky80
> Ok, nächstes mal lese ich mir den Thread ganz durch. Dachte 'c' ist ein char...


Ich fand die Namensgebung auch ungewöhnlich... aber man gewöhnt sich ja an alles ;-)


----------



## Virchow (3. Jun 2005)

...


----------



## Virchow (3. Jun 2005)

Die Namensgebung ist egal, am Ende wird es bistimmt nicht "c" und "s" heissen, sondern irgendwie "verständlicher". Das ist nur erstmal zum Rumprobieren da.


----------



## Virchow (3. Jun 2005)

Ist jetzt mehr oder weniger klar. Tritt aber folgendes Problem auf: Diesen Zeilenumbruch kriege ich irgendwie nicht hin:


```
int i=0;
 String s = new String(c);
while (s.charAt(i)!=Character.LINE_SEPARATOR) 
                       //Inhalt der  ersten Zeile ausgeben
	       {System.out.println(s.charAt(i));
	       ++i;
	       }
```


Ich bezwecke damit, dass es die Symbole der ersten Zeile ausgegeben werden, bis zum Zeilenumbruch. Klappt aber nicht..


----------



## Virchow (3. Jun 2005)

Sorry, hat jetzt gefunzt!


----------

