Spostare file nel cestino in Java 8

di il
7 risposte

Spostare file nel cestino in Java 8

Ciao!

in java 9 ho visto che c'è un metodo Desktop.moveToTrash.
ma al momento non posso usare java 9, ed avrei la necessità di non cancellare i file, ma di spostarli nel cestino.
ho provato così:

                    File f = new File(item);
                    com.sun.jna.platform.FileUtils fu = com.sun.jna.platform.FileUtils.getInstance();
                    if (fu.hasTrash()) {
                        System.out.println("OK");
                        try {
                            fu.moveToTrash(new File[]{f});
                        } catch (IOException e) {
                            
                        }
                    }
ma su linux non funziona.
e anzi, correggetemi se sbaglio, funzionerebbe solo su windows.
quindi, come posso spostare i file nel cestino invece di cancellarli??

7 Risposte

  • Re: Spostare file nel cestino in Java 8

    fermat ha scritto:


    ma su linux non funziona.
    Stando a quanto dice qui (prima cosa che ho trovato), sui Linux la directory del "cestino" è in:

    ~/.local/share/Trash

    Quindi basta spostare un file lì.

    Riguardo la com.sun.jna.platform.FileUtils, il suo sorgente lo si vede qui su github. E "a occhio" mi pare che a parte per Windows/Mac, non ci sia la logica per rintracciare quel path (ma non posso confermare/smentire ora).
  • Re: Spostare file nel cestino in Java 8

    Si confermo che linux non è al momento supportato da com.sun.jna.platform.FileUtils.

    per quanto riguarda linux, ho fatto una prova.
    sul arch linux a 64bit è ~/.local/share/Trash/files

    provo a vedere su altre distro.
    se cosi fosse, mi basterebbe usare FileUtils.hasTrash per controllare se è supportato.
    in caso così non fosse, controllare l'esistenza di ~/.local/share/Trash/files.
    e nel caso in cui nn dovesse esistere, cancellare il file e amen
  • Re: Spostare file nel cestino in Java 8

    Alla fine ho fatto così:
    
                        try {
                            File f = new File(item);
                            com.sun.jna.platform.FileUtils fu = com.sun.jna.platform.FileUtils.getInstance();
                            if (fu.hasTrash()) {
                                fu.moveToTrash(new File[]{f});
                            } else {
                                File trash = new File(System.getProperty("user.home") + "/.local/share/Trash/files");
                                if (trash.exists()) {
                                    org.apache.commons.io.FileUtils.moveFileToDirectory(f, trash, false);
                                } else {
                                    f.delete();
                                }
                            }
                        } catch (IOException e) {
                        }
    
  • Re: Spostare file nel cestino in Java 8

    fermat ha scritto:


    Alla fine ho fatto così:
    Mi pare sensata, come logica di deduzione della Trash. Non ho solo capito perché hai messo una /files sotto Trash
  • Re: Spostare file nel cestino in Java 8

    Allora, dentro Trash ho questo:
    
    $ ls -la ~/.local/share/Trash/
    drwx------  4 matte matte 12288  5 feb 08.44 expunged
    drwx------  2 matte matte 40960  5 feb 09.57 files
    drwx------  2 matte matte 65536  5 feb 09.57 info
    
    cancellando un file manualmente, ho visto che è stato spostato dentro la cartella files.
    ho controllato l'esistenza di questa cartella su due distro differenti.
    quindi ho pensato che forse era corretto specificare quella cartella!
  • Re: Spostare file nel cestino in Java 8

    fermat ha scritto:


    cancellando un file manualmente, ho visto che è stato spostato dentro la cartella files.
    Ah, allora ok. E' evidentemente la sua struttura standard quella. Ho guardato ora su una VM XUbuntu che tengo da tempo per prove ed in effetti, c'è la "files" sotto la Trash.
  • Re: Spostare file nel cestino in Java 8

    Se ho capito bene:
    - files: qui vengono spostati i files
    - info: qui vengono creati dei file di info per i file cancellati, come il path di origine, quando sono stati cancellati:
    
    [Trash Info]
    Path=/home/matte/Desktop/white.png
    DeletionDate=2018-02-05T09:57:38
    
    - expugned: qui ci dovrebbero essere delle cartelle cancellate dal mio utente, ma che contengono anche files di un altro utente

    giusto per info generale!
    ciao!!
Devi accedere o registrarti per scrivere nel forum
7 risposte