Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: Alex_47 on 27-03-2009, 11:02:45



Title: Ottimizazzione programma sui file
Post by: Alex_47 on 27-03-2009, 11:02:45
Ragazzi ho fatto questo piccolo programma sui file , ma c'è una cosa che non mi è chiara..
intanto posto il codice..

Code:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.*;

class creator
{
public static void main(String [] args) throws IOException
{
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader tastiera = new BufferedReader(in);
   
    FileOutputStream f = null;

    try
    {
    boolean esci = false;
   
    do
    {
    int x;
    String nome;
   
    System.out.println("QUESTO E' UN PROGRAMMA SU CUI SI POSSONO EFFETTUARE DIVERSE OPERAZIONI SUI FILE");
    System.out.println("+--------------------+");
    System.out.println("|1-Crea File         |");
    System.out.println("|2-Scrivi su File    |");
    System.out.println("|3-Leggi File        |");
    System.out.println("|4-Esci              |");
    System.out.println("+--------------------+");
   
    System.out.println("Scegli quale operazione eseguire:");
    x= Integer.parseInt(tastiera.readLine());
   
   
    switch(x)
    {
    case 1: //CREA FILE
    System.out.println("Scegli il nome da dare al file creato:");
    nome = tastiera.readLine();
    f = new FileOutputStream(nome,true);
        break; //----------
   
   
    case 2: //SCRIVI FILE
   
        try
        {
        System.out.println("Scrivi il nome del file da scrivere:");
        nome = tastiera.readLine();
       
        FileWriter ps = new FileWriter(nome);
       
        System.out.println("Scrivi cio' che vuoi in questo file in append:");
                    String testo = tastiera.readLine();
                      ps.write(testo);
                     
                      ps.close();
       
        }
        catch(FileNotFoundException e)
        {
        System.out.println(e);
        }
        catch(IOException e)
        {
        System.out.println(e);
        System.exit(1);
        }
       
        break;//---------------
       
    case 3: //LEGGI FILE
         try
         {
         
            System.out.println("Scrivi il nome del file da leggere:");
        nome = tastiera.readLine();
       
        FileReader brt = new FileReader(nome);
                    int c;
                    while((c = brt.read()) != -1)
                    {
                        System.out.print((char)c);
                    }
                   
                    brt.close();
                   
                 }
                 catch(FileNotFoundException e)
         {
        System.out.println(e);
         }
         
         catch(IOException e)
         {
        System.out.println(e);
        System.exit(1);
         }

    break;//---------------
   
   
    case 4:
          esci = true;
         
    break;
    }
  }
  while(!esci);   
    }
    finally
    {
    f.close();
   
    }
}


}

ho fatto le funzioni scrivi file e leggi su file , ma ancora non so come far per far in modo che mi scriva su quel file di cui inserisco il nome , infatti ogni volta che uso "scrivi su file ", e scrivo il nome di un file che non esiste , me ne crea un altro.Mentre invece vorrei che mi scrivesse solo se il file esiste , mentre se non esiste si viene a creare un eccezzione , come posso fare?


Title: Re:Ottimizazzione programma sui file
Post by: k1r4 on 27-03-2009, 12:22:32
allora secondo me, la classe FileWriter scatena un eccezione soltanto se il file non esiste e NON può essere creato. Quindi se il file esiste e può essere creato tranquillamente, non scatenerà nessuna eccezione:

dalla javadoc:
Quote
Throws:
IOException - if the named file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason

Per fare quello che vuoi tu, io agirei nel seguente modo:

Code:
case 2: //SCRIVI FILE
   
try
    {
            System.out.println("Scrivi il nome del file da scrivere:");
            nome = tastiera.readLine();

            File f = new File(nome);   // Creo un oggetto di tipo file

            // Controllo se questo file esiste, se non esiste scateno una nuova eccezione FileNotFoundException
            if (!f.exists()) {
                throw new FileNotFoundException("Il file non esiste");
            }
           
            // Altrimenti creo un FileWriter
            else {
                FileWriter ps = new FileWriter(f, true);     // Lo creo in append
       System.out.println("Scrivi cio' che vuoi in questo file in append:");
                String testo = tastiera.readLine();
                ps.write(testo);
                ps.close();
            }
        }
        catch (FileNotFoundException ex) {
           System.out.println(e);
        }
        catch (IOException ex) {
        System.exit(1);
        }
     }


Title: Re:Ottimizazzione programma sui file
Post by: Alex_47 on 27-03-2009, 13:34:08
Sono riuscito a risolvere! grazie^^