Dateien vergleichen scheitert an einer AccessDeniedException

Hallo,

ich hadere mal wieder an einem Problem :wink:

Ich möchte zwei Dateien vergleichen!
Ich dachte mir ich mach es mir ganz einfach und vergleiche einfach alle bytes:

    public boolean compare(File f1, File f2) {
        try {
            log.add("Comparing File Bytes: ");
                Path f1_path = Paths.get(f1.getPath());
                byte[] f1_Data = Files.readAllBytes(f1_path);

                Path f2_path = Paths.get(f1.getPath());
                byte[] f2_Data = Files.readAllBytes(f2_path);
            for (int i = 0; i < f1_Data.length; i++) {
                log.add("Comparing "+i+" Byte: ");
                if (f1_Data** == f2_Data**) log.add("--EQUAL--");
                else {  log.add("FAIL--UNEQUAL--FAIL"); return false;}
            }
            log.add("Comparing finished - all EQUAL");
            return true;
        } catch (IOException ex) {
            log.add("Following IOException occured: "+ex.getMessage());
            ex.printStackTrace();
            log.add("AccessDenied Reason: "+((AccessDeniedException) ex).getReason());
            return false;
        }
    }```

Nur leider kommt direkt beim ersten "Files.readAllBytes(f1_path);" folgende Exception:

java.nio.file.AccessDeniedException: C:\Users\Josh\1
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:229)
at java.nio.file.Files.newByteChannel(Files.java:315)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:380)
at java.nio.file.Files.newInputStream(Files.java:106)
at java.nio.file.Files.readAllBytes(Files.java:2952)
at util.DataHandler.compare(DataHandler.java:128)

usw…



Hatte vielleicht jemand schonmal dieselbe Exception oder weiß aus anderen Gründen wie das Problem zu lösen ist?
Wäre sehr Dankbar ;)

Hat dein Programm die Berechtigung den angegebenen Pfad aufzurufen? Sind das Dateien von einem anderen User?

Noch was, ich würde erstmal vergleichen, ob beide Dateien gleich groß sind, spart jede Menge vergleiche und vermeidet Fehler, wenn f1 größer als f2 ist.

[QUOTE=cresse]Hat dein Programm die Berechtigung den angegebenen Pfad aufzurufen? Sind das Dateien von einem anderen User?
[/QUOTE]
Das sind meine Dateien die in meinem User Home liegen, Berechtigung: Keine Ahnung, aber wahrscheinlich schon, oder?

[QUOTE=cresse;73964]
Noch was, ich würde erstmal vergleichen, ob beide Dateien gleich groß sind, spart jede Menge vergleiche und vermeidet Fehler, wenn f1 größer als f2 ist.[/QUOTE]
Das ist noch so eine Sache:
Laut Windows Explorer sind beide Dateien gleich groß laut Java ist datei 1 65536 bytes groß und datei 2 nur 4096!?

Ich bin ein bisschen verwirrt deswegen! Kann das irgendwie an der JVM oder etwas anderem unter der Haube liegen?

Welche Methode hast du denn dafür verwendet?

f1.lenght();

Ich glaube nicht, das die Längen stimmen, da ja bei dem read eine Exception geworfen wird. Was sagt denWindows über die Dateigröße?

1.40 MB

Du liest 2 mal File 1 ein:

                byte[] f1_Data = Files.readAllBytes(f1_path);
 
                Path f2_path = Paths.get(f1.getPath()); //<-------
                byte[] f2_Data = Files.readAllBytes(f2_path);```

Danke, hat aber logischerweise nichts geändert…

Probiers mal mit zwei Dateien die direkt auf C:\ liegen. Dein Users Verzchnis ist für Windows manchmal Hochsicherheitszone.