Ti ho sistemato l'errore del NullPointerException, che avviene quanto tenti di invocare metodi su un oggetto nullo, ed era causato da una cattiva lettura del file evidentemente. La versione che ti propongo io usa la serializzazione per memorizzare oggetti in un file, questo significa che basta 1 sola istruzione per memorizzare tutto l'oggetto e 1 sola per leggere tutto l'oggetto, in modo automatico, senza scrivere uno ad uno i campi dell'oggetto nel file. Se ti va bene usalo. In pratica sono stati cambiati i metodi write w reload, e qlcosina nello switch (opzione 1 e 5). Tra l'altro cerca di organizzare meglio il codice, distribuendo meglio i compiti fra le classi, il metodo reload dovrebbe essere static. Infine quando posti del codice nel forum usa il tag CODE per mantenere l'indentazione.
Bada che se usi la serializzazione, se fai delle modifiche alla classe, e cerchi ti ricaricare un ctalogo precedentemente salvato, ti darà errore, perche quell'oggetto e di una classe precedente, pero il programma non si impalla.
codice:
******** CLASSE DB *****
import java.text.*;
import java.util.*;
import java.lang.*;
import java.io.*;
import java.lang.StrictMath;
public class DB implements Serializable
{
private int nsong;//variabile di istanza contenente il numero di canzoni presenti nel catalogo
private String filename;//variabile d'istanza contenente le canzoni presenti in catalogo, songs e' realizzato tramite un array ed avra' dimensione fissata pari a 1000 elementi
private Song[] songs;//variabile d'istanza contenente il nome del file su cui viene salvato e da cui viene ripristinato il catalogo
public DB(String fn)//COSTRUTTORE
{
filename = fn;
reload();
}
public String toString()//METODO toString
{
String str = "";
if(songs != null)
for(int i = 0;i<songs.length;i++)
str += songs[i].toString() + "\n";
return str;
}
/*
public void write()//METODO write
{
File file =new File(filename);
int i = 0;
try
{
if(!file.exists()) file.createNewFile();
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(filename)));
if (songs != null)
for (i = 0; i < songs.length; i++)
out.println(songs[i].toString());
out.close ();
System.out.println ("\n\n- File salvato -");
}
catch (IOException e)
{
System.out.println ("Errore nella scrittura del file");
}
}
*/
public void write()//METODO write
{
try{
ObjectOutputStream out =
new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(filename)));
//scrivo nel file questo oggetto
out.writeObject(this);
out.close();
System.out.println ("\n\n- File salvato -");
}
catch (Exception e){
System.out.println ("Errore nella scrittura del file\n\n");
System.out.print(e);
}
}
public DB reload(){ //METODO reload()
File file = new File (filename);
if (! file.exists ()){
System.out.println ("\n\n- File inesistente! Verra' creato in seguito -");
return null;
}
Object o;
try{
ObjectInputStream in =
new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(filename)));
o = in.readObject();
}
catch (Exception e){
System.out.print("errore nella lettura dei file\n\n" + e);
return null;
}
return (DB)o;
}
/*
public void reload()//METODO reload()
{
try
{
File file = new File (filename);
BufferedReader f;
String str = "", stmp;
String []tmpArray;
if (file.exists ())
{
f = new BufferedReader (new FileReader (file));
while ((stmp = f.readLine()) != null)
{
str += stmp + "&";
}
str = str.substring (0, str.length() - 1);
tmpArray = str.split ("&");
songs = new Song [tmpArray.length];
f.close ();
System.out.println ("\n\n- File caricato -");
}
else System.out.println ("\n\n- File inesistente! Verra' creato in seguito -");
}
catch (Exception e)
{
System.out.println ("Errore");
}
}
*/
public Object clone()//METODO clone()
{
DB newDB = new DB(filename);
return newDB;
}
//--------------------------
public void backup(String newFileName)
{
String tmp = filename;
filename = newFileName;
write();
filename = tmp;
}
//-------------------------------------------
public void addSong(Song newSong)//METODO addsong
{
Song []tmp;
if (songs == null)
{
tmp = new Song [1];
}
else
{
tmp = new Song[songs.length +1];
}
tmp [0] = newSong;
for(int i = 1; i<tmp.length;i++)
tmp[i]= songs[i -1];
songs = new Song [tmp.length];
for(int i = 0; i<songs.length;i++)
songs[i] = tmp[i];
}
}
*******************************
codice:
************* CLASSE DJ ***********
import java.util.*;
import java.io.*;
import java.text.*;
public class DJ
{
//--------------------------------------------------
public static int getPosInt ()
{
BufferedReader input = new BufferedReader (new InputStreamReader (System.in));
int numero = -1;
do
{
try
{
numero = Integer.parseInt (input.readLine ());
}
catch (IOException e)
{
System.out.println ("Errore nella lettura del numero");
return -1;
}
catch (NumberFormatException e)
{
System.out.println ("Inserire un numero valido");
continue;
}
}
while (numero < 0);
return numero;
}
private static String getString ()//MTODO getString
{
BufferedReader input = new BufferedReader (new InputStreamReader (System.in));
String str;
try
{
str = input.readLine ();
}
catch (IOException e)
{
System.out.println ("Errore nella lettura della stringa");
str = null;
}
return str;
}
public static void main(String [] args)
{
int opz, limit;
DB filename = null;
String fn;
while(true)
{
//stampa a video il menu
System.out.println("\n\n1) Crea un nuovo catalogo o ripristino di un catalogo salvato su disco ");
if(filename!=null)
{
System.out.println ("2) Aggiungi di un brano al catalogo");
System.out.println ("3) Rimozione di un brano dal catalogo");
System.out.println ("4) Salvataggio del contenuto corrente del catalogo su disco");
System.out.println ("5) ricarica del contenuto dal disco con conseguente eliminazione del contenuto corrente");
System.out.println ("6) Visualizza contenuti del catalogo");
System.out.println ("7) Crea una copia in un altro file di testo il cui e' specificato da l'utente");
System.out.println ("8) Ricerca brani all'interno del catalogo");
System.out.println ("9) Ordinamento del catalogo ");
System.out.println ("10) Pulizia del catalogo ");
limit = 9;
}
else limit = 1;
System.out.println("0)Esci");
do{
System.out.println("\nscelta");
opz = getPosInt();
if(opz == -1) break;
}
while((opz<0)||(opz>limit));
switch(opz)
{
case 1:System.out.print("Inserire il nome del catalogo: ");
fn = getString();
filename = new DB(fn);
filename = filename.reload();
if(filename == null){
filename = new DB(fn);
}
break;
case 2:int scelta;
String title;//variabile d'istanza contiene il titolo del brano
String artist;//variabile d'istanza contiene l'artista che ha intepretato il brano
String album;//variabile d'istanza contiene l'album da cui e' tratto il brano
int track;//variabile d'istanza contiene posizione del brano all'interno del cd
int year;//variabile d'istanza contiene l'anno di pubblicazione da cui e' tratto il brano
String genre;//
do
{
System.out.println("[1]Inserisci un nuovo brano al catalogo: ");
System.out.println("[0]Torna indietro");
System.out.print ("\nscelta: ");
scelta = getPosInt ();
if(scelta == -1 ) break;
}
while((scelta <0)||(scelta>1));
if(scelta<=0)break;
if(scelta == 1)
{
System.out.println("\nInserire L'Artista del brano: ");
artist = getString();
System.out.println("\nInserire Il Titolo del brano: ");
title = getString();
System.out.println("\nInserire ll Nome Dell' Album : ");
album = getString();
System.out.println("\nInserire L'Anno di Produzione del brano: ");
year = getPosInt();
System.out.println("\nInserire Il Numero della Traccia : ");
track = getPosInt();
System.out.println("\nInserire Il Genere del brano: ");
genre = getString();
Song newSong = new Song(artist, title, album, year, track, genre);
filename.addSong(newSong);
}
break;
case 4:filename.write();
break;
case 5:
DB tempDB = filename.reload();
if(tempDB != null){
filename = tempDB;
System.out.println(filename);
}
break;
case 6:System.out.println("\n\n---M P 3---");
System.out.println(filename);
break;
case 7:System.out.print ("\n\nInserisci il nuovo nome: ");
filename.backup (getString ());
break;
case 0:return ;//esce dal programma
}
}
}
}
*****************************