Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Al posto di System.out, stampare su file come???

    Questo è il mio progetto:
    codice:
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import javax.xml.parsers.*;
    import java.io.*;
    
    /** DomDocumentCleanParser: versione di DomDocumentParser
    
        con output dei soli elementi di interesse per il nostro esempio.
    
        */
    public class Dom
    {
      public static org.w3c.dom.Node getChild(org.w3c.dom.Node parentNode, int childIndex)
      {
        org.w3c.dom.Node childNode = parentNode.getChildNodes().item(childIndex);
        return childNode;
      }
    
      /* Array che mappa i tipi di elemento con l'indice int corrispondente
    
         * alle specifiche per i node types di:
    
         * Document Object Model (DOM) Level 2 Core Specification
    
         * (http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113)
    
         */
    
      static final String[] typeName = { "none", "Element", "Attr", "Text", "CDATA", "EntityRef", "Entity", "ProcInstr", "Comment", "Document", "DocType", "DocFragment", "Notation" };
    
      public static void main(String[] args)
      {
        if ( args.length != 1 )
        {
          System.err.println("Usage: java Dom nomefile.xml");
          System.exit(1);
        }
        Dom ddp = new Dom();
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    
        try
        {
          PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("Prova.txt", true)));
          DocumentBuilder builder = dbf.newDocumentBuilder();
          Document document = builder.parse(new File(args[0]));
          ddp.printNodeInfo(document);
          pw.close();
          
        }
        catch (FileNotFoundException ex)
        {
          //Gestione eccezione es.
          ex.printStackTrace();
        }
        catch (SAXException sxe)
        {
          Exception x = sxe;
          if ( sxe.getException() != null )
            x = sxe.getException();
          x.printStackTrace();
        }
        catch (ParserConfigurationException pce)
        {
          pce.printStackTrace();
        }
        catch (IOException ioe)
        {
          ioe.printStackTrace();
        }
      }
    
      // main
      /** printNodeInfo(Node node)
    
        *  Metodo che esplora l'albero Dom ricorsivamente e stampa a video
    
         *  le informazioni sugli elementi.
    
         */
      private void printNodeInfo(Node currentNode)
      {
        String sNodeName = currentNode.getNodeName();
        int iNodeType = currentNode.getNodeType();
        String sNodeValue = currentNode.getNodeValue();
        int iChildNumber = currentNode.getChildNodes().getLength();
        NamedNodeMap nnmAttributes = currentNode.getAttributes();
        System.out.print("\n");
        System.out.println("Nome nodo: " + sNodeName);
        System.out.println("Tipo nodo: " + typeName[iNodeType]);
        System.out.println("Valore nodo: " + sNodeValue);
        System.out.println("Numero figli: " + iChildNumber);
        System.out.println("Attributi: " + printAttributes(nnmAttributes));
        //Se non si tratta di una foglia continua l'esplorazione ricorsivamente
        if ( iChildNumber > 0 )
        {
          NodeList nlChilds = currentNode.getChildNodes();
          for ( int iChild = 0; iChild < iChildNumber; iChild++)
          {
            printNodeInfo(nlChilds.item(iChild));
          }
        }
       
      }
    
      /** printAttributes(NamedNodeMap nnm)
    
         *  Metodo utilizzato per la formattazione degli attributi ricavati da
    
         * un elemento.
    
         */
      private static String printAttributes(NamedNodeMap nnm)
      {
        String sAttrList = new String();
        if ( nnm != null && nnm.getLength() > 0 )
        {
          for ( int iAttr = 0; iAttr < nnm.getLength(); iAttr++)
          {
            sAttrList += nnm.item(iAttr).getNodeName();
            sAttrList += "=";
            sAttrList += nnm.item(iAttr).getNodeValue();
            sAttrList += "; ";
          }
          return sAttrList;
        }
        else
        {
          return "assenti";
        }
      }
      
    }
    Vorrei trasformare i System.out.prinln();
    in salvataggio su file.
    Nel try del MAIN ho creato il file con questa
    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("Prova.txt", true)));
    ed ho creato l'eccezione FileNotFoundException

    Ora mi chiedo:
    come faccio a dire in
    private void printNodeInfo
    che vorrei pw.prinln() al posto di System.out.println()????

    O più semplicemente come si fa ad importare l'oggetto PrintWriter pw del MAIN in un'altra funziona privata void???

    Spero sappiate aiutarmi, grazie per coloro che mi risponderanno...

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

    Re: Al posto di System.out, stampare su file come???

    Originariamente inviato da xxdavide84xx
    Ora mi chiedo:
    come faccio a dire in
    private void printNodeInfo
    che vorrei pw.prinln() al posto di System.out.println()????
    Passare semplicemente il PrintWriter al metodo printNodeInfo, no??

    EDIT: e visto che printNodeInfo è un metodo di istanza, si può anche mettere il PrintWriter come campo di istanza ed usarlo semplicemente nel metodo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Essendo abituato in C avevo messo nel MAIN, ma ho capito come è possibile farlo nel printNodeInfo.

    Invece NON ho capito la seconda opzione

    EDIT: e visto che printNodeInfo è un metodo di istanza, si può anche mettere il PrintWriter come campo di istanza ed usarlo semplicemente nel metodo.
    come si farebbe questa cosa?
    nel MAIN in ddp.printNodeInfo(document);
    dovrei passare qualche altro dato fra parentesi ()

    oppure qui

    private void printNodeInfo(Node currentNode)
    sempre tra parentesi...

    Mi spieghi bene il secondo punto?
    Grazie e scusami il disturbo...

  4. #4
    puoi mettere la variabile che ti printa su file dichiarata come static nel l'instanza e poi usarla nei metodi di print in maniera statica, oppure la passi come parametro. queste sono le opzioni + veloci che mi vengono in mente.

    Ciao

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.