PDA

View Full Version : [Java] Problema con scrittura File


UnknownSoldier
25-11-2008, 18:48
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:

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:

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...

Don[ITA]
25-11-2008, 20:05
A naso direi che non hai messo anche il nome del file dopo la path:

java.io.FileNotFoundException: /home/utente/Desktop (Is a directory)

Prova ad aggiungere qualcosa tipo "/file.html" dopo desktop.

Ciauz

UnknownSoldier
25-11-2008, 21:42
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ì:

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 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().equals ("") ? "index.html" : url.getFile());
String title = "text.txt";
String output = explore (url);
System.out.println ("Text: " + output);
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.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...

sottovento
26-11-2008, 11:03
Hai provato poi a chiudere il Formatter? (i.e. writer.close())

UnknownSoldier
26-11-2008, 17:44
Hai provato poi a chiudere il Formatter? (i.e. writer.close())

No ed infatti poi ho scoperto che era questo il problema ;)