Creare collegamenti (shortcuts) con java

di p0ll0_ il
12 risposte
Ho trovato su stackoverflow dei codici per farlo, ma bisogna scaricare una libreria e questa libreria non la trovo da nessuna parte... Soluzioni? Grazie mille... Altrimenti se non si riesce in java si riesce in qualche altro modo? Grazie.

12 Risposte

  • p0ll0_ ha scritto:


    Ho trovato su stackoverflow dei codici per farlo, ma bisogna scaricare una libreria e questa libreria non la trovo da nessuna parte... Soluzioni? Grazie mille... Altrimenti se non si riesce in java si riesce in qualche altro modo? Grazie.
    Se non dici nemmeno qual è questa libreria.......
  • SpiritoLibero ha scritto:


    Io ho trovato una discussione su SO che punta dritta a questa libreria:

    https://github.com/DmitriiShamrikov/mslink

    (non l'ho provata, ma sembra fare quel che chiedi, per Windows).
    Grazie ! Credo fosse la stessa libreria, ma adesso ho trovato il link per scaricarla.
    Ho scaricato la libreria e l'ho importata, poi ho scritto questo codice
          try {
                String link1 = "C:\\Users\\admin\\Desktop\\target\\file originale.txt";
                String link2 = "C:\\Users\\admin\\Desktop\\target\\file originale.lnk";
    
                ShellLink sl = ShellLink.createLink(link1);
                sl.getHeader().getLinkFlags().setAllowLinkToLink();
                sl.saveTo(link2);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    Ho provato anche a scambiare link1 con link2, in entrambi i casi mi viene dato questo errore:
    Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedClassVersionError: mslinks/ShellLink has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 52.0

    Non so che fare...
  • Alka ha scritto:


    p0ll0_ ha scritto:


    Ho trovato su stackoverflow dei codici per farlo, ma bisogna scaricare una libreria e questa libreria non la trovo da nessuna parte... Soluzioni? Grazie mille... Altrimenti se non si riesce in java si riesce in qualche altro modo? Grazie.
    Se non dici nemmeno qual è questa libreria.......
    Lo hai detto?
  • Questo però è C#, io non so nulla di quello...

    Adesso ho provato questo

    trovato qui https://docs.oracle.com/javase/tutorial/essential/io/links.html


      try {
    
                Path newLink = Paths.get("C:\\Users\\admin\\Desktop\\target\\boh.lnk");
                Path target = Paths.get("C:\\Users\\admin\\Desktop\\target\\file originale.txt");
                try {
                    Files.createSymbolicLink(newLink, target);
                } catch (IOException x) {
                    System.err.println(x);
                } catch (UnsupportedOperationException x) {
                    // Some file systems do not support symbolic links.
                    System.err.println(x);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

    ma mi da questo errore java.nio.file.FileSystemException: C:\Users\admin\Desktop\target\boh.lnk: Il privilegio richiesto non appartiene al client.


    Ho provato questo codice

      try {
                Path newLink = Paths.get("C:\\Users\\admin\\Desktop\\target\\boh.lnk");
                Path existingFile = Paths.get("C:\\Users\\admin\\Desktop\\target\\file originale.txt");
                try {
                    Files.createLink(newLink, existingFile);
                } catch (IOException x) {
                    System.err.println(x);
                } catch (UnsupportedOperationException x) {
                    // Some file systems do not
                    // support adding an existing
                    // file to a directory.
                    System.err.println(x);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }


    E finalmente crea un collegamento, ma quando lo apro non succede nulla.


    Ho provato questo (non so più nemmeno io che cosa sto facendo)
        Path link = Paths.get("C:\\Users\\admin\\Desktop\\target\\file originale.txt");
            try {
                System.out.format("Target of link"
                        + " '%s' is '%s'%n", link,
                        Files.readSymbolicLink(link));
            } catch (IOException x) {
                System.err.println(x);
            }


    Mi viene dato questo errore.

    java.nio.file.NotLinkException: Il file o la directory non costituisce un reparse point.
  • Sintatticamente è "molto" simile ,se sei abituato a leggere e scrivere codice java dovresti , a mio avviso, capire anche quelle poche righe di c# ,se ti può essere utile "visual studio community 2022" è gratuito e liberamente scaricabile
  • Ma non riuscite nemmeno con la shell?
  • gian82 ha scritto:


    Sintatticamente è "molto" simile ,se sei abituato a leggere e scrivere codice java dovresti , a mio avviso, capire anche quelle poche righe di c# ,se ti può essere utile "visual studio community 2022" è gratuito e liberamente scaricabile
    Sintatticamente è simile, ma alcune "regole" sintattiche e di funzionamento sono completamente diverse, specialmente quando si deve "interoperare" nativamente con il sistema operativo, e soprattutto lo sono le librerie di base con cui si lavora.

    p0ll0_ ha scritto:


    Ma non riuscite nemmeno con la shell?
    Ma tu hai provato a cercare qualche soluzione per farlo con la shell?

    Io ad esempio ho trovato questo script in Powershell.

    Per lanciare un programma esterno puoi prendere spunto da questo esempio (anche se, non essendo esperto di Java, non saprei garantire se è aggiornato o sostituibile con forme migliori).
  • Purtroppo non conosco la shell... Provo a chiedere al mio collega, lui la conosce.
  • Ciao

    Ho provato questo codice (ma su Linux) e funziona:
    
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.Files;
    import java.io.IOException;
    
    public class Main {
      public static void main(String[] args) {
         Path newLink = Paths.get("/home/xxx/linkDaCreare");
         Path target = Paths.get("/home/xxx/fileOriginale");
         try {
             Files.createSymbolicLink(newLink, target);
         } catch (IOException x) {
             System.err.println(x);
         } catch (UnsupportedOperationException x) {
             // Some file systems do not support symbolic links.
             System.err.println(x);
         }
    
      }
    }
    
    Occhio però al tipo di link: questo è uno simbolico (o se vuoi soft), mentre c'è anche l'opzione hard link.
    Alcuni sistemi non supportano il soft link
  • Ce l'ho fatta! Ho provato a scaricare un'altra versione 0.0.2 e con quella ho messo questo codice e funziona:
    
                String STARTUP_PATH = "/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup";
                File file = new File(System.getProperty("user.home") + STARTUP_PATH + "/programma.lnk");
    
                if (!file.exists()) {
                    try {
                        ShellLink.createLink("/programma.exe", file.getAbsolutePath());
                    } catch (IOException e) {
                 
                        e.printStackTrace();
                    }
                }
Devi accedere o registrarti per scrivere nel forum
12 risposte