Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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:
public static void main(String[] args)
{
MD5Calc md5 = new MD5Calc("SHA-256");
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
File datei = new File("/tmp/11/a");
FileReader br = new FileReader(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ören
if(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.
public static void main(String[] args)
{
MD5Calc md5 = new MD5Calc("SHA-256");
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
File datei = new File("/tmp/11/a");
FileReader br = new FileReader(datei);
int gelesenInt;
String gelesenChar = "";
for(;;){
gelesenInt = br.read();
if(gelesenInt == -1){break;}
}
gelesenChar = Integer.toString(gelesenInt);
try {
System.out.println(md5.do_checksum(gelesenChar)+"\n");
}
catch(IOException ioe) {
ioe.printStackTrace();
}
}
Führt zu:
Code:
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.