Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Path salvataggio file

  1. #1

    Path salvataggio file

    ho una JFrame che in apertura richiama questo metodo:
    codice:
        private static File xmlFile = new File("todo.xml");
    
        public static void create() throws ParserConfigurationException, TransformerConfigurationException, TransformerException, IOException {
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.newDocument();
    
            Element todos = doc.createElement("todos");
            doc.appendChild(todos);
    
            Element todo = doc.createElement("todo");
            todo.appendChild(doc.createTextNode("hello"));
            todos.appendChild(todo);
    
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            if (!xmlFile.exists()) {
                xmlFile.createNewFile();
                StreamResult result = new StreamResult(xmlFile);
                transformer.transform(source, result);
            }
        }
    teoricamente dovrebbe creare il file nella stessa directory del jar eseguito.
    invece la crea nella home dell'utente.
    come faccio a dirgli di creare il file nella stessa directory del jar?
    a me servirebbe così xchè una piccola applicazione che mi devo portare in pen drive con il file.

  2. #2
    oggi ho fatto delle prove.
    se lancio il programma da netbeans il file viene creato dove c'è il jar.
    se invece sposto il jar, ad esempio sul desktop, e lo avvio a mano il file lo crea dentro la home.
    poi il resto è ok, nel senso che se riavvio il programma il file nn viene sovrascritto.
    solo che lo salva nel posto sbagliato.
    avete qualche idea??

  3. #3
    Prova a salvare il file aggiungendo il percorso relativo:
    codice:
    File file = new File("./prova.xml");
    lolide
    Java Programmer

    Informati

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Dovresti riuscire a tirare fuori il path (URL) del jar così:
    codice:
    this.getClass().getProtectionDomain().getCodeSource().getLocation();
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    grazie appena torno a casa provo perchè ho scoperto che in verità su mac e windows funziona senza problemi.
    è solo su linux che mi fa così.
    forse un problemi di permessi.
    devo provare su un'altra distro.
    vi faccio sapere!

  6. #6
    purtroppo nn ho più avuto molto tempo e mi ci sono rimesso oggi.
    nn ho ben capito come dovrei usare questa roba.
    io pensavo così:
    codice:
        private String pathJar = this.getClass().getProtectionDomain().getCodeSource().getLocation().toString();
        private File xmlFile = new File(pathJar + "/todo.xml");
    e così:
    codice:
        private String pathJar = this.getClass().getProtectionDomain().getCodeSource().getLocation().toString();
        private File xmlFile = new File(pathJar + "/todo.xml");
    ma mi da sempre l'errore:
    "No such file or directory".

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    prima di lanciarti a capofitto nelle cose, un minimo di debug dovresti farlo... hai stampato il path che ottieni, prima di provare a creare un File da qualche parte semplicemente aggiungendo il nome alla fine del path? Magari c'è un po' di cosmesi da applicare, tipo togliere parti inutili...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Originariamente inviato da Andrea1979
    prima di lanciarti a capofitto nelle cose, un minimo di debug dovresti farlo... hai stampato il path che ottieni, prima di provare a creare un File da qualche parte semplicemente aggiungendo il nome alla fine del path? Magari c'è un po' di cosmesi da applicare, tipo togliere parti inutili...
    hai perfettamente ragione scusa.
    allora:
    codice:
        private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
            String pathJar = this.getClass().getProtectionDomain().getCodeSource().getLocation().toString();
            JOptionPane.showMessageDialog(null, pathJar);
        }
    ho spostato il jar nel posto dove dovrei lanciarlo:
    file:/media/MATTE/dist/ToDoList.jar

    suppongo di dover levare la parte ToDoList.jar in modo poi da appenderci il file xml.
    qualche suggerimento?

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    E' corretto. Devi togliere la parte finale. Puoi recuperare la posizione dell'ultimo "/" con lastIndexOf e poi fare un substring fino a lì
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    io ho fatto così:
    codice:
        private File xmlFile = null;
    
        public Xml() {
            String pathJar = this.getClass().getProtectionDomain().getCodeSource().getLocation().toString();
            int s = pathJar.lastIndexOf("/");
            String end = pathJar.substring(0, s + 1);
            xmlFile = new File(end + "todo.xml");
        }
    
        public void create() throws ParserConfigurationException, TransformerConfigurationException, TransformerException, IOException {
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.newDocument();
    
            Element todos = doc.createElement("todos");
            doc.appendChild(todos);
    
            Element todo = doc.createElement("todo");
            todo.appendChild(doc.createTextNode("hello"));
            todos.appendChild(todo);
    
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            if (!xmlFile.exists()) {
                xmlFile.createNewFile();
                StreamResult result = new StreamResult(xmlFile);
                transformer.transform(source, result);
            }
        }
    il path sembra giusto:
    file:/media/MATTE/Project/JAVA/ToDoList/build/classes/
    però poi mi ridà l'errore no such file or directory.

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.