Esercizio 3
Scrivi un programma che sia in grado di leggere un file di testo nel quale siano contenute una serie di stringhe su più righe consecutive, ad es.
alpha
bravo
charlie
delta
echo
foxtrot
lo stesso programma deve permettere di modificare una delle stringhe salvando successivamente sullo stesso file, il cambiamento.
Il programma principale apre il file contenente le stringhe e le memorizza in un arraylist, dato che non possiamo conoscere preventivamente quante parole ci sono nel file.
L'arraylist viene stampato dal metodo vista().
L'arraylist (A) viene passato al metodo mod(A)
che ne permette la modifica.
Dopo le modifiche il nuovo arraylist viene stampato a video, prima del suo successivo salvataggio nel file.
import java.io.*;
import java.util.ArrayList;
class nomi{
public static void main (String args []) throws IOException{
BufferedReader f=null;
int i=0;
String s="";
ArrayList A=new ArrayList(0);
//lettura del file e caricamento array
try {
f=new BufferedReader(new FileReader("nomi.txt"));
while(s!=null){
s=f.readLine();
if(s!=null){
A.add(s);
i++;
}//fine if
}//fine while
f.close();
}catch (IOException e){ System.err.println("errore");}
vista(A);
mod(A);
vista(A);
salva(A);
}//fine main
//-----
static void vista(ArrayList A){
for(int i=0;i < A.size();i++)System.out.print(i+" "+A.get(i)+"\n");
}//fine metodo vista
//-----
static void mod(ArrayList A) throws IOException{
InputStreamReader input=new InputStreamReader(System.in);
BufferedReader h= new BufferedReader(input);
String s;
int i;
System.out.print("index:");
i=Integer.parseInt(h.readLine().trim());
System.out.print("nuovo nome:");
s=h.readLine();
A.set(i,s); } //fine mod
//-----
static void salva(ArrayList A){
PrintWriter f=null;
try {
f=new PrintWriter(new FileWriter("nomi.txt"));
}catch (IOException e){ System.err.println("errore");}
//scrittura
for(int i=0;i < A.size();i++)f.println(A.get(i));
f.close();
}//fine metodo salva
}//fine class