Guten Tag zusammen,
Ich hänge zurzeit an der implementierung der canRead Methode. Und zwar sollen wir im Konstruktor testen ob der übergebene Pfadname auf eine lesbare Datei zeigt.
Hier noch die genaue Aufgabenstellung:
"Bauen Sie in den Konstruktor AudioFile(String pathname) der Klasse AudioFile einen Test ein, der prüft ob der im Parameter des Konstruktors übergebene Pfadname tatsächlich auf eine lesbare Datei zeigt.
Nutzen Sie für den Zugriffstest den normalisierten Pfadnamen, den die Methode getPathname()liefert (dh. den Test erst nach Bereinigung des Pfadnames ausführen).
Hinweis: die Methode canRead der Klasse File erlaubt Ihnen, die Lesbarkeit einer Datei zu
prüfen. Dazu müssen Sie aber zunächst ein Objekt der Klasse File erzeugen. Falls die Datei nicht lesbar ist, soll die Anwendung mittels throw new RuntimeException(<Ihr Fehlertext mit Nennung des Pfadnamens>); eine Ausnahme (Exception) generieren.
Da wir erst später eine Fehlerbehandlung (catch) für diese Ausnahme an geeigneter Stelle einführen, resultiert das Erzeugen der Exception (throw exception) derzeit auch im sofortigen Abbruch der Anwendung."
1) Habe ich bei der Implementierung probleme und weiß nicht wie man das genau umsetzten muss
2) Weiß ich nicht was exceptions sind bzw wie man diese genau einsetzt.
3) wie führe ich den Abbruch herbei, heißt dass das der ganze Konstruktor nicht ausgeführt werden kann?
Sry ich bin ein absoluter Java Neuling und hab wirklich noch keinen durchblick. Ich hänge nun mal meinen gesamten code an. Aber der oben beschriebene teil dreht sich nur um den Konstruktor (z.21). Habs jetzt mal probiert was zu programmieren, aber glaub nicht dass viel richtig ist.
Vielen Dank im Voraus!
Ich hänge zurzeit an der implementierung der canRead Methode. Und zwar sollen wir im Konstruktor testen ob der übergebene Pfadname auf eine lesbare Datei zeigt.
Hier noch die genaue Aufgabenstellung:
"Bauen Sie in den Konstruktor AudioFile(String pathname) der Klasse AudioFile einen Test ein, der prüft ob der im Parameter des Konstruktors übergebene Pfadname tatsächlich auf eine lesbare Datei zeigt.
Nutzen Sie für den Zugriffstest den normalisierten Pfadnamen, den die Methode getPathname()liefert (dh. den Test erst nach Bereinigung des Pfadnames ausführen).
Hinweis: die Methode canRead der Klasse File erlaubt Ihnen, die Lesbarkeit einer Datei zu
prüfen. Dazu müssen Sie aber zunächst ein Objekt der Klasse File erzeugen. Falls die Datei nicht lesbar ist, soll die Anwendung mittels throw new RuntimeException(<Ihr Fehlertext mit Nennung des Pfadnamens>); eine Ausnahme (Exception) generieren.
Da wir erst später eine Fehlerbehandlung (catch) für diese Ausnahme an geeigneter Stelle einführen, resultiert das Erzeugen der Exception (throw exception) derzeit auch im sofortigen Abbruch der Anwendung."
1) Habe ich bei der Implementierung probleme und weiß nicht wie man das genau umsetzten muss
2) Weiß ich nicht was exceptions sind bzw wie man diese genau einsetzt.
3) wie führe ich den Abbruch herbei, heißt dass das der ganze Konstruktor nicht ausgeführt werden kann?
Sry ich bin ein absoluter Java Neuling und hab wirklich noch keinen durchblick. Ich hänge nun mal meinen gesamten code an. Aber der oben beschriebene teil dreht sich nur um den Konstruktor (z.21). Habs jetzt mal probiert was zu programmieren, aber glaub nicht dass viel richtig ist.
Java:
// The public class AudioFile is the basic class of our mediaplayer
// Every object of our class AudioFile refers to one single audiofile
// The so-called pathname consists on two parts. The path and the filename
// @http://openbook.rheinwerk-verlag.de/javainsel/
import java.io.File;
public class AudioFile {
private String filename;
private String author;
private String title;
private String pathname; // path + filename
// Default constructor
// Every attribute got the default value, Strings = null;
public AudioFile() {
}
public AudioFile(String pathname) {
parsePathname(pathname);
//Tests if pathname points to an existing file
File f = null;
f = new File(getPathname());
boolean bool = f.canRead();
if(bool != true){
throw new RuntimeException("File cant be read");
}
parseFilename(getFilename());
}
// Processes the pathname to a regular expression
public void parsePathname(String pname) {
// Handle Windows root directory in UNIX like systems
if (!isWindows() && pname.length() >= 2) {
if (Character.isLetter(pname.charAt(0)) && pname.charAt(1) == ':') {
pname = "/" + pname.charAt(0) + "/" + (pname.length() == 2 ? "" : pname.substring(3));
}
}
// Deletes multiple sepChars
pname = pname.replace('\\', '/');
pname = pname.replaceAll("/{2,}", "/");
pname = pname.replace('/', java.io.File.separatorChar);
// auxiliary variables
int spacesAndTabCounter = 0;
int lastIndexSepChar = -1;
// Tests if the pathname consists only out of Tabs and Spaces
for (int i = 0; i < pname.length(); i++) {
char c = pname.charAt(i);
if (c == ' ' || c == '\t') {
spacesAndTabCounter++;
} else if (c == java.io.File.separatorChar) {
lastIndexSepChar = i;
}
}
pathname = pname;
if (pname.isEmpty() || spacesAndTabCounter == pname.length() || lastIndexSepChar == -1) {
filename = pname;
} else {
if (lastIndexSepChar == pname.length() - 1) {
filename = "";
} else {
filename = pname.substring(lastIndexSepChar + 1);
}
}
}
private boolean isWindows() {
return System.getProperty("os.name").toLowerCase().contains("win");
}
// Processes the filename to a regular expression and into two Parts. The
// author and the title
public void parseFilename(String fname) {
// Find the beginning of the title
int indexTitleBeginning = -1;
for (int i = 1; i < fname.length() - 1; i++) {
if (Character.isWhitespace(fname.charAt(i - 1)) && fname.charAt(i) == '-' && Character.isWhitespace(fname.charAt(i + 1))) {
indexTitleBeginning = i;
break; // leaves the for-loop
}
}
if (indexTitleBeginning == -1) {
author = "";
title = fname;
} else {
author = fname.substring(0, indexTitleBeginning);
title = fname.substring(indexTitleBeginning + 1);
}
// Deletes Spaces in front of the first letter
int whitespaces = 0;
for (int i = 0; i < author.length(); i++) {
if (!Character.isWhitespace(author.charAt(i))) {
break;
}
whitespaces++;
}
author = author.substring(whitespaces);
// Author Transformation
// Deletes all unimportant spaces
// Find the last char != space and deletes all following spaces
for (int i = author.length() - 1; i >= 0; i--) {
if (!Character.isWhitespace(author.charAt(i))) {
author = author.substring(0, i + 1);
break;
}
}
// Title Transformation
// Deletes Spaces before the title starts
whitespaces = 0;
for (int i = 0; i < title.length(); i++) {
if (!Character.isWhitespace(title.charAt(i))) {
break;
}
whitespaces++;
}
title = title.substring(whitespaces);
int lastFullStop = title.lastIndexOf('.');
if (lastFullStop != -1) {
title = title.substring(0, lastFullStop);
}
// Deletes spaces following the title
for (int i = title.length() - 1; i >= 0; i--) {
if (!Character.isWhitespace(title.charAt(i))) {
title = title.substring(0, i + 1);
break;
}
}
}
public String getAuthor() {
return author;
}
public String getTitle() {
return title;
}
public String getPathname() {
return pathname;
}
public String getFilename() {
return filename;
}
@Override
public String toString() {
if (getAuthor().isEmpty()) {
return title;
} else {
return getAuthor() + " - " + getTitle();
}
}
}
Vielen Dank im Voraus!