Input/Output EOF von csv-Datei in FilterInputStream

mukay

Neues Mitglied
Hallo,

Folgende Classe behandelt eine csv Datei die mittels FileInputStream an den Konstrukter übergeben wird.

Java:
import java.io.*;
     
public class CSVInputStream
extends FilterInputStream {
  public CSVInputStream(InputStream in) {
    super(in);
  }
  public String readChunk(char s) throws IOException {
    StringBuilder sb = new StringBuilder();
    char c = (char)read();
    while((c!='\n')&&(c!=s)&&(c!=65535)) {
      sb.append(c);
      c = (char)read();
    }
    return sb.toString();
  }    
}
Der Aufruf funktioniert z.B. mit
Java:
CSVInputStream csvIS = new CSVInputStream (new FileInputStream("test.csv"));
csvIS.readChunk(',');

Die csv-datei test.csv sieht z.b. so aus
z1c1,z1c2,z1c3
z2c1,z2c2,z2c3
z3c1,z3c2,z3c3

Wie man sieht wird in readChunk solange gelesen bis entweder das seperator-zeichen kommt (,), das Zeilenende('\n') oder das EOF (65535), und das funktioniert auch so.
Normalerweise sollte das EOF jedoch mit -1 definiert sein (java-documentation/FileInputStream.read)
und schöner wäre es auch mit Konstante. Hat jemand eine Erklärung dafür?
 
read() liefert dir ein int -1 und kein char -1
Du machst aus der -1 int ein char !
Java:
System.out.println((int)((char)-1));

😉
 
Java:
import java.io.*;
     
public class CSVInputStream
extends FilterInputStream {
  public CSVInputStream(InputStream in) {
    super(in);
  }
  public String readChunk(char s) throws IOException {
    StringBuilder sb = new StringBuilder();
    int i;    
    while((i=read())!=-1) {
      char c = (char)i;
      if(c=='\n' || c==s)
            break;
      sb.append(c);
    }
    return sb.toString();
  }    
}

EDIT:Nach eRaaaas Kommentar angepasst. Das kommt davon, wenn grad keine IDE offen ist 😀
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben