Hi!
Ich belege neben meinem eigentlichen Studium einzelne Informatik Module aus Interesse und muss eine Klasse "Leser" schreiben was eine Datei einlesen kann und dann, je nachdem ob es sich um eine gzip Datei handelt oder nicht, die Datei dekomprimiert und anschließend ausließt. Diese Klasse ist Teil eines Programms welche dann mit einer Klasse "Verschlüsselung" den Inhalt der Datei verschlüsseln bzw. aufschlüsseln kann.
Meine Frage beschränkt sich auf die Klasse "Leser". Ich komme nicht mit dem Syntax klar und finde meine Vorlesung höchst unnütz und finde sonst wo nicht wirklich eine Antwort. Ich kann kaum "konkrete" Fragen stellen, aber habe die Aufgabe (jedenfalls im Ansatz) bereits gelöst, bzw. habe eine Lösung von der ich nicht denke, dass sie richtig ist.
Aufgabenstellung:
Mein Programmcode bisher:
Fragen: Wie genau kann ich Dateien einlesen? Ist das so richtig?
Wie sollte ich am effizientesten mit den Exceptions hier umgehen? Ich habe einfach meine IDE die try - catch Klauseln weitgehend schreiben lassen. Gerne auch verweis auf sinnvolle / nützliche Internetseiten. Würde mich natürlich auch über Korrektur / Anmerkungen zum Code freuen.
[CODE lang="java" title="Klasse "Leser""]import java.io.*;
import java.util.*;
import java.util.zip.GZIPInputStream;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.util.zip.GZIPInputStream;
import java.util.List;
import java.util.ArrayList;
public class Leser extends Collections {
private String header;
private BufferedReader leser;
private String pfad;
public Leser(String pfad){
this.pfad = pfad;
File datei = new File(pfad);
GZIPInputStream gis = null;
FileInputStream fis = null;
//FileInputStream
try {
fis = new FileInputStream(datei);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if(pfad.endsWith(".gz")){
//GZIPInputStream
try {
gis = new GZIPInputStream(fis);
} catch (IOException e) {
e.printStackTrace();
}
//InputStreamReader
InputStreamReader r = new InputStreamReader(gis);
//InitialisiereHeader
leser = new BufferedReader(r);
try {
if (leser.readLine().isEmpty()) {
header = null;
} else {
header = leser.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
//BufferedReader
try {
leser = new BufferedReader(new FileReader(datei));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//InitialisiereHeader
try {
if (leser.readLine().isEmpty()){
header = null;
} else {
header = leser.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public List<String> liesInhalt(){
List<String> inhalt = new ArrayList<>();
String zeile;
inhalt.add(null);
try{
while((zeile =leser.readLine())!=null){
inhalt.add(zeile);
if (zeile.length() == 0) {
break;
}
}}catch (IOException e){e.printStackTrace();}
// WIE KANN ICH DIE EXCEPTION WEITERGEBEN?
return inhalt;
}
public String getHeader() {
return header;
}
}
[/CODE]
Ich belege neben meinem eigentlichen Studium einzelne Informatik Module aus Interesse und muss eine Klasse "Leser" schreiben was eine Datei einlesen kann und dann, je nachdem ob es sich um eine gzip Datei handelt oder nicht, die Datei dekomprimiert und anschließend ausließt. Diese Klasse ist Teil eines Programms welche dann mit einer Klasse "Verschlüsselung" den Inhalt der Datei verschlüsseln bzw. aufschlüsseln kann.
Meine Frage beschränkt sich auf die Klasse "Leser". Ich komme nicht mit dem Syntax klar und finde meine Vorlesung höchst unnütz und finde sonst wo nicht wirklich eine Antwort. Ich kann kaum "konkrete" Fragen stellen, aber habe die Aufgabe (jedenfalls im Ansatz) bereits gelöst, bzw. habe eine Lösung von der ich nicht denke, dass sie richtig ist.
Aufgabenstellung:
- (07 Punkte) Implementieren Sie den Getter, die Attribute und den Konstruktor.
Der Konstruktor soll dabei auf Basis der Datei-Endung entscheiden wie diese Datei einzulesen ist.
Wird versucht eine Datei mit der Endung ".gz" einzulesen, so soll diese dekomprimiert werden. Bei allen anderen Endungen soll ein Reader ohne Dekomprimierung verwendet werden.
Zusätzlich soll die erste Zeile eingelesen und in der Variable header zu speichern. Wenn die Datei leer ist, soll der String leer initialisiert werden.
Implementieren Sie weiterhin die folgenden Methoden - (06 Punkte) liesInhalt soll den gesamten Inhalt der Datei zurückgeben mit Ausnahme des Headers und den Reader am Ende schließen.
Achten Sie bei dieser Methode darauf, dass Rückgaben erzeugt werden, selbst wenn die Datei leer ist.
Die Methoden dieser Klasse sollen die Exception die geworfen werden können nach außen weitergeben.
Mein Programmcode bisher:
Fragen: Wie genau kann ich Dateien einlesen? Ist das so richtig?
Wie sollte ich am effizientesten mit den Exceptions hier umgehen? Ich habe einfach meine IDE die try - catch Klauseln weitgehend schreiben lassen. Gerne auch verweis auf sinnvolle / nützliche Internetseiten. Würde mich natürlich auch über Korrektur / Anmerkungen zum Code freuen.
[CODE lang="java" title="Klasse "Leser""]import java.io.*;
import java.util.*;
import java.util.zip.GZIPInputStream;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.util.zip.GZIPInputStream;
import java.util.List;
import java.util.ArrayList;
public class Leser extends Collections {
private String header;
private BufferedReader leser;
private String pfad;
public Leser(String pfad){
this.pfad = pfad;
File datei = new File(pfad);
GZIPInputStream gis = null;
FileInputStream fis = null;
//FileInputStream
try {
fis = new FileInputStream(datei);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if(pfad.endsWith(".gz")){
//GZIPInputStream
try {
gis = new GZIPInputStream(fis);
} catch (IOException e) {
e.printStackTrace();
}
//InputStreamReader
InputStreamReader r = new InputStreamReader(gis);
//InitialisiereHeader
leser = new BufferedReader(r);
try {
if (leser.readLine().isEmpty()) {
header = null;
} else {
header = leser.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
//BufferedReader
try {
leser = new BufferedReader(new FileReader(datei));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//InitialisiereHeader
try {
if (leser.readLine().isEmpty()){
header = null;
} else {
header = leser.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public List<String> liesInhalt(){
List<String> inhalt = new ArrayList<>();
String zeile;
inhalt.add(null);
try{
while((zeile =leser.readLine())!=null){
inhalt.add(zeile);
if (zeile.length() == 0) {
break;
}
}}catch (IOException e){e.printStackTrace();}
// WIE KANN ICH DIE EXCEPTION WEITERGEBEN?
return inhalt;
}
public String getHeader() {
return header;
}
}
[/CODE]