Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    comparazione dei file

    Salve a tutti,
    ho un problema sulla comparazione dei file. In poche parole ho 2 file(immagini) con nomi diversi e devo verificare se sono uguali. Non credo, o almeno non lo trovo, un metodo per verificare questo nella classe File di java.
    Qualcuno sa dirmi come fare?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: comparazione dei file

    Originariamente inviato da lio.b
    ho un problema sulla comparazione dei file. In poche parole ho 2 file(immagini) con nomi diversi e devo verificare se sono uguali. Non credo, o almeno non lo trovo, un metodo per verificare questo nella classe File di java.
    Qualcuno sa dirmi come fare?
    Se devi verificare che i due file siano identici byte per byte, l'unica è aprire 2 stream con FileInputStream, leggere a blocchi di N byte, comparare i blocchi e così via fino alla fine.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Possibile che non esiste altro modo? Il mio problema è che devo inserire immagini in una cartella. Quindi dovrei evitare di inserire un'immagine già presente ma che ovviamente abbia un'altro nome, per evitare doppioni.
    Se nella cartella le immagini presenti sono 50 confrontare il file da inserire con tutti questi diventa troppo oneroso. Mi chiedevo se esistono altre soluzioni tipo un'impronta, un hash o roba del genere.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    Se nella cartella le immagini presenti sono 50 confrontare il file da inserire con tutti questi diventa troppo oneroso.
    Ma no! Se inizi a fare il confronto byte per byte, se 2 immagini sono diverse, già all'inizio (anche solo entro i primi 1000 byte, per dire) saranno quasi sicuramente diversi. In tal caso non vai avanti e passi al prossimo file! Insomma, è più veloce di quanto credi ....

    Originariamente inviato da lio.b
    Mi chiedevo se esistono altre soluzioni tipo un'impronta, un hash o roba del genere.
    Certo, anche qui crei un FileInputStream, leggi a blocchi di N byte e li passi ad un java.security.MessageDigest. Tra l'altro trovi un esempio proprio di "digest" di un file tra i miei Java Examples (vedi firma), sezione Security.

    Questa soluzione avrebbe senso solo hai già calcolato e memorizzato da qualche parte es. su un db o file (magari durante una esecuzione precedente) gli hash dei file nella directory, oppure se devi aggiungere tanti file e all'inizio della applicazione calcoli gli hash e li metti in una "map" in memoria che aggiorni in modo "incrementale" man mano che aggiungi file.
    Altrimenti è inutile e onerosa.

    E comunque con gli hash, sai bene che se 2 hash sono diversi, i file sono sicuramente diversi. Ma se 2 hash sono uguali ... i file possono essere uguali oppure diversi! E lo devi comunque scoprire facendo la comparazione byte per byte.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Grazie,
    gentile come sempre. Dato che mi sembri il più preparato di tutti ti sarei molto grado se mi potressi dare qualche consiglio circa un post sulle librerie oreilly e l'upload dei file che ho inserito qualche giorno fa a cui nessuno mi ha dato risposta.

    Ciao e graze ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.