Newsgroup: it.comp.java
Titolo: java e i/o [LUNGO]

Ciao a tutti. Sono nuovo dell'ng ed anche per la programmazione in
Java.
Volevo chiedervi un aiuto per un programma che vorrei scrivere per
allenarmi con l'i/o.
Premetto che ho già cercato su Google, sul libro di Horstmann e su
Thinking in Java 3 ma non ho trovato nulla che potesse rispondere con
precisione alle mie domande.
---
Prima domanda:
Io ho un programma formato da tre classi, quella del test, quella che
simula un file system con array di descrittori di file e l'ultima, del
descrittore generico dei file:
/*
  Elenco delle variabili private usate dalla classe.
*/
  private String nome;
  private String estensione;
  private int data;
  private int dimensione;
  private String contenuto;
  private boolean scrivibilità;
  public static final int LUNG_NOME = 8;
  public static final int LUNG_ESTENSIONE = 3;
/*
  Metodo che costruisce un oggetto FileDescriptor, ossia che crea la
descrizione dei file.
*/
  public DescrittoreFile (String nome, String estensione, String
contenuto, boolean scrivibile)
  {
    this.nome = nome;
    this.estensione = estensione;
    this.contenuto = contenuto;
    this.scrivibilità = scrivibile;
  }
Ora, io vorrei creare un metodo che gestisce la modifica del file:
tale metodo aggiorna automaticamente la data del file e la sua
lunghezza in caso di modifica.
Questa è l'intestazione, public void modify(String contenuto), ma non
so come fare ad aggiornarne la data od a calcolare la lunghezza del
file.
Come posso fare?
---
---
Seconda domanda:
Come faccio a settare se un file è scrivibile o no? Ossia a settare i
permessi di scrittura?
Io ho messo nella definizione del metodo un "boolean scrivibile" e
vorrei tenerlo tale.
---
Grazie a tutti coloro che risponderanno alle mie domande.


wrote:

Fammi capire... tu per allenarti vorresti replicare le funzionalità di
java.io.File ? O semplicemente non hai trovato nulla sulla
documentazione fornita da Sun riguardo a questa classe ?
--
"tanto va la gatta al largo che affoga"
(per rispondere personalmente leva IlDitoDalCulo)

java.io.File ? 
Questa. Grazie.


wrote:

Vorrei darti qualche consiglio:
1) secondo me dovresti rispettare il design pattern dei JavaBeans.
Questo significa che per ognuna delle variabili private che hai deciso
di inserire all'interno della tua classe DescrittoreFile, dovrai
scrivere una coppia di metodi getXxx/setXxx che permetteranno un
accesso controllato, pubblicando a tutti gli effetti una "proprietà"
della classe. Nessuno dice che *devi* fare così, ma ormai è una
convenzione adottata da *tutti* i programmatori Java
2) dato che la tua classe rappresenta un file (seppure in memoria), la
variabile "contenuto" dovrebbe essere un array di byte. A questo punto
potresti perfino fare a meno della proprietà "dimensione" e
sostituirla con il metodo getSize che ritorni all'esterno il valore di
contenuto.length . Il contenuto stesso lo modifichi creando un metodo
del tipo
  public void setContenuto(byte[] cont) {
    if (!scrivibilita)
      throw new IllegalStateException("Il file è in sola lettura!");
    contenuto=cont;
    data=System.currentTimeMillis();
  }
Con System.currentTimeMillis() ottieni la data e l'ora di sistema
misurata in millisecondi dalla mezzanotte 01/01/1970 (è il metodo
usato in tutte le JVM). Come vedi effettua anche il controllo del
permesso (come l'hai chiamato te, in realtà dovrebbe chiamarsi
"attributo") in lettura/scrittura. Se vuoi modificarlo puoi creare la
classica coppia di metodi get/set:
  public void setScrivibilita(boolean sc) {
    scrivibilita=sc;
  }
  public boolean getScrivibilita() {
    return scrivibilita;
  }
3) infine sotto Java i nomi di file non hanno la limitazione che c'era
sotto MS-DOS (8 caratteri per il nome e 3 per l'estensione), quindi
farei totalmente a meno di quelle due costanti LUNG_NOME e
LUNG_ESTENSIONE. Se però vuoi simulare esattamente questo ambiente, ti
conviene mettere dei controlli di coerenza nel costruttore e dotare la
tua classe dei metodi accessori (get/set) sia per il nome, sia per
l'estensione, sia (magari) per la combinazione dei due.
Questo è quanto. Spero di esserti stato utile.
Buon apprendimento ;)


Buon apprendimento ;)
Grazie mille per i tuoi consigli. Mi hai chiarito un bel po' la
questione.
Vado a continuare col lavoro...
Ciao!