File mit canRead() testen

SuperSheriff

Mitglied
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.

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!
 

Flown

Administrator
Mitarbeiter
Dein Code ist doch schon gut so. Ein wenig kürzen könnte man ihn noch:
Java:
public AudioFile(String pathname) {
  parsePathname(pathname);
  File f = new File(getPathname());
  if(!f.canRead()) {
    throw new RuntimeException("File cant be read");
  }
  parseFilename(getFilename());
}
Oder hast du ein anderes Problem?
 

SuperSheriff

Mitglied
Mhm ok, na ich wusste halt nicht ob das so passt, ist aber anscheinend doch richtig :) Zur Exception hab ich noch eine Frage bewirkt die nun dass kein Objekt ohne regulären Pfadnamen erzeugt werden kann? Führen unbehandelte Exception immer zum Abbruch?
 

Flown

Administrator
Mitarbeiter
Zur Exception hab ich noch eine Frage bewirkt die nun dass kein Objekt ohne regulären Pfadnamen erzeugt werden kann
Also es wird kein AudioFile-Objekt erzeugt, wenn es das File nicht gibt oder eben nicht lesbar ist.

Allgemein: Es gibt einen Call-Stack, der in der Methode "main" anfängt (vereinfacht). Dann führst du deine Prozeduren/Methoden aus (egal wie tief). Wenn dann eine Exception auftritt, dann wird sie so weit nach dem Call-Stack hinaufgereicht, bis die Exception behandelt wird oder die VM das übernehmen muss. Wenn Letzteres passiert wird dein Programm für gewöhnlich beendet.
 

SuperSheriff

Mitglied
Vielen Dank! bin nun beim Junittest bei uns im Üb heißt es man kann Methoden als Testfall durch @test markieren, funktioniert bei mir aber nicht

und import org.junit.Test; geht nicht importieren ich bekomme immer die Fehlermeldung
"Access restriction: The type 'Test' is not API (restriction on required library 'C:\Program Files (x86)\eclipse-java-mars-2-win32-x86_64\eclipse\plugins\org.junit_4.12.0.v201504281640\junit.jar')"

Die Libraries für Junit 3/4 hab ich schon angehängt, weiß nicht wo das problem liegt
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Input/Output File exists canRead canWrite Java Basics - Anfänger-Themen 11
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
R File.pathSeparator und File.separator Java Basics - Anfänger-Themen 46
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
berserkerdq2 IOstreams, was unterscheidet file von z. B. BufferedWriter? Java Basics - Anfänger-Themen 11
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
A java jar-File Java Basics - Anfänger-Themen 1
E Executable jar file fehler Java Basics - Anfänger-Themen 9
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
I ZIP File erstellen Java Basics - Anfänger-Themen 10
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
Tom/S File Java Basics - Anfänger-Themen 10
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
A Checkstyle - File contains tab characters Java Basics - Anfänger-Themen 2
H Java file nicht gefunden Java Basics - Anfänger-Themen 5
C File speichern Java Basics - Anfänger-Themen 5
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
K File (png) in Image laden Java Basics - Anfänger-Themen 3
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
K File wird in der .Jar nicht gefunden Java Basics - Anfänger-Themen 3
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
Trèfle EXCEL-File Laufwerkunabhängig einbinden. Java Basics - Anfänger-Themen 1
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
A jar File kleiner bekommen Java Basics - Anfänger-Themen 3
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
K File-Name Vergleich Java Basics - Anfänger-Themen 2
krgewb Runnable JAR File Export Java Basics - Anfänger-Themen 11
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
E War-File Problem mit Eclipse Java Basics - Anfänger-Themen 3
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Email versenden Outlook, attached File, ohne Anmeldung Java Basics - Anfänger-Themen 4
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
K Runable Jar File erstellen Java Basics - Anfänger-Themen 17
T Java Executable jar file funktioniert nicht Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
Kopak'rraf Korruptes zip File. Java Basics - Anfänger-Themen 0
T File für Einstellungen wird nicht geladen Java Basics - Anfänger-Themen 1
S Sounddatei in Jar File integrieren Java Basics - Anfänger-Themen 2
S Index File bauen Java Basics - Anfänger-Themen 5
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
Ghostman1711 Itext PDF print File gelockt by Java Java Basics - Anfänger-Themen 15
N Email mit Anhang - File not Found Java Basics - Anfänger-Themen 1
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
A file.delete funktioniert nicht Java Basics - Anfänger-Themen 15
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
S jar file Java Basics - Anfänger-Themen 19
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
B Dateityp von File bekommen Java Basics - Anfänger-Themen 2
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
I String zu File umwandeln Java Basics - Anfänger-Themen 2
N File virtuell ByteStream Java Basics - Anfänger-Themen 11
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
Anfänger2011 file.isDirectory() liefert falschen Wert!? Java Basics - Anfänger-Themen 1
ms_cikar Jar file mit resource erzuegen Java Basics - Anfänger-Themen 28
E lesen csv file column by column Java Basics - Anfänger-Themen 10
U Anhand von Ant ein War-File erstellen Java Basics - Anfänger-Themen 0
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
O Zip-File Inhalt einlesen Java Basics - Anfänger-Themen 3
V Erste Schritte Dateinamen aus einer FIle[] in eine List Java Basics - Anfänger-Themen 11
P Jar File Java Basics - Anfänger-Themen 3
B Probleme bei "Daten in CSV File schreiben". Java Basics - Anfänger-Themen 9
S CSV File - "Vergleichen und Sortieren" Java Basics - Anfänger-Themen 3
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
A Wieso übergibt der nicht die bearbeitete txt file Java Basics - Anfänger-Themen 8
Ruvok Executable Jar File startet nicht Java Basics - Anfänger-Themen 3
R Ini File erstellen Java Basics - Anfänger-Themen 1
J file.lenght spinnt ab 50mb Java Basics - Anfänger-Themen 7
B sehr lange Srings in File schreiben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben