Ich habe nun das neuste JDK installiert und das Skript erfolgreich getestet. Nun versuche ich es auf das bestimmen des sha256-Wertes eines Files umzuschreiben. Hier mein Versuch:
Java:
publicstaticvoidmain(String[] args){MD5Calc md5 =newMD5Calc("SHA-256");// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));File datei =newFile("/tmp/11/a");FileReader br =newFileReader(datei);char gelesenChar;// erzeugen einer Dauerschleife:for(;;){int gelesenInt = br.read();// Wenn kein Zeichen mehr zurückgegeben wird (= -1),// dann ist das Dateienende ereicht,// daher aufhörenif(gelesenInt ==-1){break;}// ein char wird als integer eingelesen!//Daher als char umwandeln//gelesenChar = (char) gelesenInt;}try{System.out.println(md5.do_checksum(gelesenInt)+"\n");}catch(IOException ioe){
ioe.printStackTrace();}}}
Führt zu:
Code:
# javac MD5Calc.java
MD5Calc.java:75: cannot find symbol
symbol : variable gelesenInt
location: class MD5Calc
System.out.println(md5.do_checksum(gelesenInt)+"\n");
^
1 error
Würde mir mal jemand zeigen wie es richtig geht, und ein paar Zeilen dazu erklären?
die Variablen gelesenInt ist nur in dem Bereich der Schleife bekannt (Scope), da du sie dort definiert hast, wenn man sie auch ausserhalb der Schleife kennen soll, musst du sie auch ausserhalb definieren.
javac MD5Calc.java
MD5Calc.java:69: exception java.io.IOException is never thrown in body of corresponding try statement
catch(IOException ioe) {
^
MD5Calc.java:55: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
FileReader br = new FileReader(datei);
^
MD5Calc.java:61: unreported exception java.io.IOException; must be caught or declared to be thrown
gelesenInt = br.read();
^
3 errors
Welche Teile der Fehlermeldungen verstehst du nicht? Es steht doch da, was für Möglichkeiten du hast: Um den kritischen Code ein [c]try[/c] rum sowie ein darauffolgendes [c]catch[/c], um den Code zu "entschärfen", oder die aufrufende Methode als kritisch markieren.
Okay, mal die Fehlermeldung vereinfacht und auf deutsch:
[c]file2String(String)[/c] kann nicht auf [c]FileReader[/c] angewandt werden. Anders ausgedrückt: [c]file2String(String)[/c] kann nur dann was halbwegs Intelligentes machen, wenn es sich beim konkreten Argument (das Ding in Klammern) tatsächlich um einen String handelt. in der angekreideten Zeile ist [c]in[/c] jedoch vom Typ FileReader, und (und jetzt kommt der eigentliche Grund für den Fehler) ein FileReader ist kein String.