Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1

    [JAVA] Gestione classe File con eccezioni

    Ciao a tutti! Il problema dovrebbe essere semplice, ma non capisco alcune cose..

    Devo creare una classe che utilizzi la classe File, già esistente in Java, e alcuni suoi metodi.
    I problemi iniziano già col costruttore della mia classe che, preso in input un File o una Directory, verifica se questo esiste già. Se esiste, il metodo deve sollevare l'eccezione SecurityException, altrimenti deve memorizzare in una variabile privata l'argomento directory e creare la directory.
    I dubbi che ho sono 2, posto il codice e poi vi spiego:

    codice:
    public class FileManager{
    	public FileManager(File directory) throws SecurityException {
    
    	File dir;
    	dir.createNewFile();
    
    	}
    }
    Oltre ad essere incompleta, mi rendo conto che ci sono alcuni errori, ma li ho scritti perché:
    1) Al posto di createNewFile (che non funziona) dovrei fare qualcos altro..ho provato tutti i costruttori di File ma senza risultati

    2) Per throws dovrei fare "if(directory.exists())" ? Se è false dà un'eccezione e si passa direttamente al throws?

    Forse (anzi, sicuramente) ho altri dubbi, ma per ora preferisco chiarire solo questi, che sono già abbastanza

    Grazie!

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

    1) Perché devi lanciare SecurityException? (giusto per curiosità) Normalmente un SecurityException viene lanciato dal "security manager", non da codice "utente".

    2) createNewFile() crea un file solo se non esiste già e ovviamente il File su cui è invocato deve rappresentare il pathname di un file, non di una directory (come invece hai evidenziato nel codice mettendo File dir).

    3) File di per sé non permette di scrivere/leggere sul file. La classe File è solo una rappresentazione "astratta" di un percorso sul file-system. Se devi leggere/scrivere o creare sempre in ogni caso un file, dovresti usare le altre classi per l/O del package java.io.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Originariamente inviato da andbin
    Alcune cose:

    1) Perché devi lanciare SecurityException? (giusto per curiosità) Normalmente un SecurityException viene lanciato dal "security manager", non da codice "utente".

    2) createNewFile() crea un file solo se non esiste già e ovviamente il File su cui è invocato deve rappresentare il pathname di un file, non di una directory (come invece hai evidenziato nel codice mettendo File dir).

    3) File di per sé non permette di scrivere/leggere sul file. La classe File è solo una rappresentazione "astratta" di un percorso sul file-system. Se devi leggere/scrivere o creare sempre in ogni caso un file, dovresti usare le altre classi per l/O del package java.io.
    1)Non lo so..l'esercizio che mi hanno dato lo richiede ("Se un file o directory con il nome contenuto nel file directory esiste gia' allora il metodo deve sollevare l'eccezione SecurityException")
    2) Nel main (di una classe che usa questa che sto facendo) ci sono le istruzioni:
    codice:
            String nomeDirectory="PROVA";
    	FileManager provaManager=new FileManager(new File(nomeDirectory));
    ed è in questo punto che viene richiamato il costruttore di FileManager, che dovrebbe sollevare l'eccezione..

    devo quindi creare una directory..ma non ho la minima idea di come fare

    Per ulteriori chiarimenti potrò rispondere domani, ora devo uscire !
    Grazie per l'interesse

  4. #4
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    A questo punto devi usare il metodo mkdir() (oppure il mkdirs(), a seconda dei casi).
    Entrambi i metodi che ti ho citato lanciano una SecurityException (ed ecco spiegato il perchè è richiesto nell'esercizio).
    Per maggiori info:
    http://java.sun.com/j2se/1.4.2/docs/...e.html#mkdir()
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  5. #5
    Grazie al sito (delle API) che mi hai linkato e qualche esempio trovato in Internet sono andato un pò avanti,diciamo che ho risolto il primo problema!
    Il codice che ho scritto è questo:

    codice:
    public class DirManager{
    	private String path;
    	private File f;
    	public DirManager(File directory) throws SecurityException {
    		path=directory.getAbsolutePath();    
    		if(!(directory.exists()))
                    {
    			f=new File(path);
    			f.mkdir(); 
    		}
    		else
    			throw new SecurityException();
    		}
    
    	
    }
    I problemi sono 3:
    1) Siccome mi serve usare il file f in altri metodi, è giusto che io lo usi come variabile d'istanza, o mi conviene creare un metodo getFile() ? Lo stesso per path.
    2) In questo modo viene sollevata la SecurityException, ma c'è un modo per fare lo stesso mettendo solo throws SecurityException di fianco alla dichiarazione del costruttore?
    3) Ho creato prima un nuovo file, a partire dal percorso di quello dato come parametro, poi una directory a partire dal file. Ecco, non mi è chiaro cosa ho "fisicamente creato", nel senso che, dopo aver creato un file (che file?), per directory cosa si intende? Ho creato una cartella? Perché io per directory intendo un percorso come "C:\.....", ma a cosa mi serve crearla dopo aver creato un file? VVoVe:

    Scusate le 1000 domande, ma l'utilizzo di files e directory per me è proprio nuovo

    Grazie ancora!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Leo15
    A questo punto devi usare il metodo mkdir() (oppure il mkdirs(), a seconda dei casi).
    Entrambi i metodi che ti ho citato lanciano una SecurityException (ed ecco spiegato il perchè è richiesto nell'esercizio).
    Per maggiori info:
    http://java.sun.com/j2se/1.4.2/docs/...e.html#mkdir()
    Attenzione!!!! SecurityException vuol dire "guarda che a te non è permesso di fare questa operazione". È una cosa più grave. Non vuol dire che la directory non può essere creata ma che non ti è permesso di usare mkdir() per fare questa operazione specifica sul file-system.

    Uno scenario tipico è in una applet non firmata digitalmente, che non ha quindi accesso al file-system. Pertanto cercare di eseguire mkdir() provoca certamente il lancio di SecurityException.
    Ma all'interno di una applicazione non vedo per quale motivo dovrebbe lanciare un SecurityException! Il metodo mkdir() ritorna un boolean. Se riesce a creare la directory, bene ritorna true, altrimenti false (es. nome errato, directory già esistente, ecc...). Nessuna eccezione SecurityException.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Altre due domande (sto pasticciando un pò con i file ), vi prego di avere un pò di pazienza!!

    1) Devo cancellare un file. Tramite il main di una classe invoco il metodo della classe DirManager (quella che mi permette di modificare i file). Spiego meglio col codice che ho fatto:

    codice:
    	public boolean delete(String namefile){                       
    
    		 File fileToDelete = new File(namefile);
    		 if (fileToDelete.exists()){
    
    	             if(f.delete())
    		     	  return true;
    		      else
    		   	  return false;}
        	   	else return false;
    	}
    Prendo come parametro il nome di un file (o una directory) e, dopo aver controllato che esiste, lo cancello. Se l'operazione ha successo restituisco true, altrimenti false. Il fatto è che non cancella nulla, anche se la directory è creata ed è vuota...cosa sbaglio?

    2) Devo sovrascrivere un file, usando la classe PrintWriter. Pensavo bastasse usare il metodo println() come nel codice qui sotto, e invece..non sovrascrive nulla!

    codice:
    public void overwrite(File file, String content)      throws java.io.FileNotFoundException{
    		PrintWriter printFile= new PrintWriter(file);
    		printFile.println(content);
    
    
    
    	}

    Daiii, altri 2 o 3 aiuti e ho finito anche i metodi da usare

    Grazie ancora

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lasentinella
    codice:
    	public boolean delete(String namefile){                       
    
    		 File fileToDelete = new File(namefile);
    		 if (fileToDelete.exists()){
    
    	             if(f.delete())
    		     	  return true;
    		      else
    		   	  return false;}
        	   	else return false;
    	}
    Hai usando 2 variabili diverse: fileToDelete e poi f. Penso che non sia quello che volevi ...

    Originariamente inviato da Lasentinella
    codice:
    public void overwrite(File file, String content)      throws java.io.FileNotFoundException{
    		PrintWriter printFile= new PrintWriter(file);
    		printFile.println(content);
    	}
    Dovresti come mimino chiudere il file o fare un flush!!
    Ecco un modo corretto:
    codice:
    public void overwrite (File file, String content)
        throws FileNotFoundException
    {
        PrintWriter pw = null;
    
        try {
            pw = new PrintWriter (file);
            pw.println (content);
        } finally {
            if (pw != null)
                pw.close ();
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Grazie, il metodo overwrite() ora funziona

    Il metodo delete() continua a darmi problemi:

    codice:
    public boolean delete(String namefile){                        
    
       File fileToDelete = new File(namefile);
       System.out.println(fileToDelete.exists());
    	if (fileToDelete.exists()){
    	    if(fileToDelete.delete())
    		return true;
    	     else
    		return false;
                 }
    	else
    	    return false;
    	}
    La cosa strana è che nell'altra classe creo una cartella, poi invoco questo metodo e dico di cancellarla (passando il nome del file).
    Nel primo controllo, fileToDelete.exists() mi restituisce false. Strano, no?
    provando a togliere quel controllo, fileToDelete.delete() restituisce false, pure lui! Cosa sbaglio?


    Altra cosa:
    Devo realizzare un metodo che, passato un file e una variabile int pos, legga la riga pos del file. Leggendo in vari siti ho trovato questo codice, opportunamente modificato.

    codice:
    public String readLine(File file, int pos){
    
    	try{
    		FileReader reader = new FileReader(file.getName());
    		Scanner in = new Scanner(reader);
    		PrintWriter out = new PrintWriter(file.getName());
    		String line=" ";
    		int lineNumber = 1;
    		while (in.hasNextLine()&&lineNumber<=pos)
    		{
    			line = in.nextLine();
    			System.out.println("/* " + lineNumber + " */ " + line);/* */
    			lineNumber++;
    		}
    		out.close();
    		return line;
    	}catch (FileNotFoundException exc){
    			return "";
    
    }
    Compila, ma non restituisce la linea...




    Dopo questi due problemi ho solo più 3 metodi da realizzare, ma molto simili a quest'ultimo, quindi dovrei (spero) farcela da solo...per questi due metodi ho passato tutta la mattinata a cercare come farli, anche perché a scuola nessuno me l'ha spiegato! Vi chiedo solo più un piccolo aiuto, visto che mi tocca capire tutto da solo! Grazieeee


  10. #10
    Ho messo online i 2 files, DirManager è la classe in cui sono contenuti i metodi per modificare, creare ed eliminare i file, Test4 è la classe che utilizza DirManager. Qualcuno potrebbe aiutarmi a sistemare almeno il metodo delete()? Con il programma sottomano penso vi sia più facile..devo riuscirci entro Sabato e penso proprio che non ce la farò

    http://www.fileupyours.com/files/84410/Test4.java
    http://www.fileupyours.com/files/84410/DirManager.java

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.