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

    Problema con scrittura File

    Salve a tutti. Sto cercando di creare un programma che scarica una pagina web e la salve in una determinata cartella nel computer.
    Allora, riesco a procurarmi il sorgente della pagina, ma ho un problema durante la scrittura... ecco il metodo interessato:

    codice:
        public void saveHTML (URL url, File location) throws Exception
        {
            String title = url.getFile();
            String output = explore (url);
            File file = new File (location, title);
            
            Formatter writer = new Formatter (file);
            writer.format ("%s", output);
        }
    il file "file" dovrebbe essere salvato in una directory specificata da "location" con il nome di "title".
    Quando però mando in esecuzione, viene lanciata questa eccezione:

    codice:
    java.io.FileNotFoundException: /home/utente/Desktop (Is a directory)
            at java.io.FileOutputStream.open(Native Method)
            at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
            at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
            at java.util.Formatter.<init>(Formatter.java:2025)
            at WebExplorer.saveHTML(WebExplorer.java:50)
            at WebExplorer.<init>(WebExplorer.java:14)
            at WebExplorer.main(WebExplorer.java:56)
    La riga 50 sarebbe la riga in cui creo il Formatter... ho provato anche con BufferedWriter, ma da lo stesso errore, eppure non capisco dove sbaglio...

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    java.io.FileNotFoundException: /home/utente/Desktop (Is a directory)
    ....dove cerchi di scrivere è una directory...Sembra quasi che non ti prenda il child...( secondo parametro di File.
    Controlla un paio di cose con la classe File:
    codice:
    File.exists();
    File.createNewFile();
    inoltre hai verificato le due variabili title ed output?
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Originariamente inviato da @DI3GO@
    ....dove cerchi di scrivere è una directory...Sembra quasi che non ti prenda il child...( secondo parametro di File.
    Controlla un paio di cose con la classe File:
    codice:
    File.exists();
    File.createNewFile();
    inoltre hai verificato le due variabili title ed output?
    Allora, ho appena verificato che la variabile "title" è vuota, ma perchè?? Eppure io ho passato un URL ben preciso... ecco il sorgente completo:

    codice:
    import java.util.Scanner;
    import java.util.Formatter;
    import java.io.InputStream;
    import java.io.File;
    import java.net.URL;
    import java.net.URLConnection;
    
    public class WebExplorer
    {    
        public WebExplorer (String address)
        {
            try
            {
                saveHTML (new URL ("http://www.google.it"), new File ("/home/utente/Desktop"));
            }
            catch (Exception exception)
            {
                exception.printStackTrace();
            }
        }
        
        public String explore (URL url) throws Exception
        {
            String output = "";
            
            URLConnection connection = url.openConnection();
            connection.setDoInput(true);
            connection.setUseCaches(false);
    
            InputStream inputStream = connection.getInputStream();            
            Scanner scanner = new Scanner (inputStream);
    
            while (scanner.hasNext())
            {
                output += scanner.next();
            }
            
            inputStream.close();
            scanner.close();
            
            return output;
        }
        
        public void saveHTML (URL url, File location) throws Exception
        {
            String title = url.getFile();
            String output = explore (url);
            File file = new File (location, title);
            
            Formatter writer = new Formatter (file);
            writer.format ("%s", output);
        }
        
        public static void main (String[] args)
        {
            new WebExplorer ("http://www.google.com");
        }
    }

  4. #4
    Il problema era che "www.google.com" in effetti non ha un file, dato che nell'indirizzo c'è solo appunto un indirizzo e non una pagina. Quindi ho risolto così:

    Codice PHP:
    import java.util.Scanner;
    import java.util.Formatter;
    import java.io.InputStream;
    import java.io.File;
    import java.net.URL;
    import java.net.URLConnection;

    public class 
    WebExplorer
    {    
        public 
    WebExplorer (String address)
        {
            try
            {
                
    saveHTML (new URL (address), new File ("/home/utente/Desktop"));
            }
            catch (
    Exception exception)
            {
                
    exception.printStackTrace();
            }
        }
        
        public 
    String explore (URL urlthrows Exception
        
    {
            
    String output "";
            
            
    URLConnection connection url.openConnection();
            
    connection.setDoInput(true);
            
    connection.setUseCaches(false);

            
    InputStream inputStream connection.getInputStream();            
            
    Scanner scanner = new Scanner (inputStream);

            while (
    scanner.hasNext())
            {
                
    output += scanner.next() + " ";
            }
            
            
    inputStream.close();
            
    scanner.close();
            
            return 
    output;
        }
        
        public 
    void saveHTML (URL urlFile locationthrows Exception
        
    {
            
    //String title = (url.getFile().equals ("") ? "index.html" : url.getFile());
            
    String title "text.txt";
            
    String output explore (url);
            
    System.out.println ("Text: " output);
            
    File file = new File (locationtitle);
            
            
    Formatter writer = new Formatter (file);
            
    writer.format ("%s"output);
        }
        
        public static 
    void main (String[] args)
        {
            new 
    WebExplorer ("http://www.dieffeweb.com/it/contact.php");
        }

    Ora però c'è un altro problema. Ho preso ad esempio la pagina di un mio sito, e voglio salvare il suo codice in un file chiamato "text.txt". La variabile output contiene correttamente il risultato della pagina dato che me lo visualizza in console, ma nel file "text.txt", non c'è niente, è vuoto! Cos'è sta volta che non va? Che strano...

  5. #5
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da Dreamer89


    Ora però c'è un altro problema. Ho preso ad esempio la pagina di un mio sito, e voglio salvare il suo codice in un file chiamato "text.txt". La variabile output contiene correttamente il risultato della pagina dato che me lo visualizza in console, ma nel file "text.txt", non c'è niente, è vuoto! Cos'è sta volta che non va? Che strano...
    Per farlo devi usare una servlet.
    Non conosco un altro modo.
    con getParameter( nome_istanza ).

    Se non ricordo male è questo il comando!
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  6. #6
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    E poi non dite che non vi voglio bene.....

    Allora.
    Ho trovato ed analizzato questo codice.
    Praticamente ( senza servlet - imparato cosa nuova anche io )
    Preleva il codice html di indirizzo dato.
    La cosa particolare di questo codice è la presenza dei singoli elementi, quindi non ritornerà <html>, ma solo html.
    Allo stesso modo vengono recuperati i parametri e vengono recuperati gli href.
    Classe importante Reader e package html
    codice:
    import java.io.*;
    import java.net.*;
    import javax.swing.text.*;
    import javax.swing.text.html.*;
     
    class GetLinks
    {
    	public static void main(String[] args)
    	{
    		EditorKit kit = new HTMLEditorKit();
    		Document doc = kit.createDefaultDocument();
     
    		// The Document class does not yet handle charset's properly.
    		doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
     
    		try
    		{
    			// Create a reader on the HTML content.
    			Reader rd = getReader( "http://www.google.it" );
     
    			// Parse the HTML.
    			kit.read(rd, doc, 0);
     
    			// Iterate through the elements of the HTML document.
     
    			ElementIterator it = new ElementIterator(doc);
    			Element elem;
     
    			while ( (elem = it.next()) != null )
    			{
    				System.out.println( elem.getName() );
    				SimpleAttributeSet s =
    					(SimpleAttributeSet)elem.getAttributes().getAttribute(HTML.Tag.A);
     
    				if (s != null)
    				{
    					System.out.println( s );
     
    					//  disiplay attribute value
    					System.out.println( s.getAttribute(HTML.Attribute.HREF) );
     
    					//  display tag text
    					int start = elem.getStartOffset();
    					System.out.println( elem.getDocument().getText(start,
    							 elem.getEndOffset() - start) );
    				}
    			}
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
     
    		System.exit(1);
    	}
     
    	// Returns a reader on the HTML data. If 'uri' begins
    	// with "http:", it's treated as a URL; otherwise,
    	// it's assumed to be a local filename.
    	static Reader getReader(String uri)
    		throws IOException
    	{
    		// Retrieve from Internet.
    		if (uri.startsWith("http:"))
    		{
    			URLConnection conn = new URL(uri).openConnection();
    			return new InputStreamReader(conn.getInputStream());
    		}
    		// Retrieve from file.
    		else
    		{
    			return new FileReader(uri);
    		}
    	}
    }
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  7. #7
    Ho scoperto che il problema era che non avevo chiuso il Formatter dopo la scrittura :P

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.