Hallo !
Hoffentlich kann mir jemand bei meinem Problem helfen:
Ich muss aus einer kompremierten Datei zeilenweise auslesen.
Leider kenne ich nur die Methode readLine(), aber diese Idee klappt nicht.
Andere Methoden habe ich auch schon probiert, aber diese lesen nicht zeilenweise ein....
Bitte um Hilfe.
mfg
shadow
Hoffentlich kann mir jemand bei meinem Problem helfen:
Ich muss aus einer kompremierten Datei zeilenweise auslesen.
Leider kenne ich nur die Methode readLine(), aber diese Idee klappt nicht.
Andere Methoden habe ich auch schon probiert, aber diese lesen nicht zeilenweise ein....
Bitte um Hilfe.
Code:
/**
* Methode die die erste Zeile einer Dateil als Bookshop erkennt, und alle folgenden Zeilen
* als Books. Es wird zuallerest die Zeilenanzahl ueberprueft, da es schon vorher zu einem
* Abbruch kommen kann.
* @param source Quelldatei
* @return true, bei erfolgreichem Lesen
*/
public static BookStore readBookStore(boolean unZip, String source) {
BookStore bookStore=null;
int lineCounter=0; // Variable fuer Anzahl der Lines in der Datei
try {
// da es passieren kann, dass eine Zeile leer ist, sieht man zuerst nach,
// wie viele Zeilen die Date hat - könnte schon vorher abbrechen !
lineCounter=0;
Object inDataStream=null;
GZIPInputStream readUnzip=null;
if (unZip==true)
{
readUnzip =
new GZIPInputStream( new FileInputStream( source+".gz" ) );
inDataStream=readUnzip;
lineCounter=readNrOfItems(source+".gz");
}
else
{
// Liest die Datei zeilenweise ein. Öffen, Befüllen eines BufferedReaders
DataInputStream read =
new DataInputStream(
new BufferedInputStream(
// aus Datei:
new FileInputStream(source)));
inDataStream=read;
lineCounter=readNrOfItems(source);
}
BookStore newBookStore=null;
Vector newBooks=null;
Book newBook=null;
for (int i = 0; i < lineCounter; i++)
{
String line = inDataStream.readLine(); // hier ist der fehler
if ( (line != null) && (line.length() > 0))
{
// parsing line
if (i==0) // erste Zeile in der Datei -> bekanntlich die BookStore Daten....
{
String[] array = line.split(" "); // Array durch Leerzeichen erstellen lassen
double id = Double.parseDouble(array[0]); // String in double umwandeln, damit man einen neuen Bookstore aufmachen kann
int postalCode = Integer.parseInt(array[2]); // String in int umwandeln, damit man einen neuen Bookstore aufmachen kann
newBookStore = new BookStore(id);
newBookStore.setName(array[1]);
newBookStore.setPostalCode(postalCode);
System.out.print(newBookStore);
}
else // Regal des Shops mit Büchern befüllen
{
String[] array = line.split(" ## "); // alle Eingaben durch Leerzeichen trennen und in Array speichern
for (int j=0; j<array.length; j++)
{
switch (j) // feld des arrays bestimmen - ab dem 3ten feld sind autoren vorzufinden
{
case 0:
newBook=new Book(array[j]);
System.out.println(newBook.getIsbn());
break;
case 1:
newBook.setTitle(array[j]);
System.out.println(newBook.getTitle());
break;
case 2:
double price = Double.parseDouble(array[j]);
newBook.setPrice(price);
System.out.println(newBook.getPrice());
break;
default:
String [] newAuthors=new String[array.length-3]; // weil die ersten drei Felder keine Autoren sind
for (int x=3; x<array.length; x++)
{
newAuthors[x-3]=array[x];
System.out.print(" "+newAuthors[x-3]);
}
newBook.setAuthors(newAuthors);
newBookStore.addBook(newBook); // jetzt einfach das Bücherregal füllen
break;
} // end switch
} // end for Restarray mit Autoren durcharbeiten
} // end else wenn die erste zeile kontrolliert wurde
} // end if
} // end for
inDataStream.close(); // Datei zumachen !
return newBookStore;
}
catch (Exception e)
{
// Input-Exceptions auffangen
System.err.println("Dateizugriffsfehler: " + e.getLocalizedMessage());
return null;
}
}
mfg
shadow