Creare oggetti da file

di il
8 risposte

Creare oggetti da file

Ciao a tutti
Ho da poco iniziato a studiare il linguaggio Java e ho una gran confusione in testa ;
sono alle prese con la creazione di un miniprogramma il quale dovrà:

- leggere un file (studenti.txt)
- creare un oggetto per ogni riga del file
- scrivere nello stesso file

--- ESEMPIO FILE ---

NOME | PUNTI | COEFFICIENTE | MATRICOLA
Giorgio|20|1.3|30495
Luca|19|1.1|20494
Silvia|21|1.2|79403

Vi posto il codice da me scritto:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Aula {

	public static void main(String[] args) throws IOException {
		
		// apro il file
	    BufferedReader lettore = new BufferedReader(new FileReader("C:\\Users\\user\\Desktop\\studenti.txt")); 
	    
	    //leggo una riga alla volta
	    String riga;
		riga = lettore.readLine();
		
		
		// continuo a leggere righe fino alla fine del file
		while(riga!=null) {
			
			    	// divido ogni riga in varie stringhe
					String[] studente = (riga.split(";"));
			    	
			    	String nome = studente[0];
			        int punti = Integer.parseInt(studente[1]);
			        double coefficiente = Double.parseDouble(studente[2]);		    
			        String nMatricola = studente[3];
			      

			        System.out.println(nome+punti+coefficiente+nMatricola);
			        riga = lettore.readLine();
		} //fine while
	}
}
Come faccio a creare degli oggetti che abbiano nome punti coefficiente e nMatricola, in modo che poi potrò fare altre operazioni?

8 Risposte

  • Re: Creare oggetti da file

    Gli oggetti che devi creare sono jlabel il cui testo sarà nome, punti, coefficiente, nMatricola e jtext in cui scriverai i dati letti che successivamente potrai modificare, quindi devi studiare come si creano questi oggetti oppure cercare in rete (in inglese) esempi
    Una strada più semplice potrebbe essere creare una jtable come da questo esempio
    https://stackoverflow.com/questions/10466079/import-csv-to-jtable

    P.S:. probabilmente ho interpretato male la tua domanda, non tener conto di questa risposta
  • Re: Creare oggetti da file

    Ciao, potresti creare una classe separata Studente con i seguenti fields :

    NOME | PUNTI | COEFFICIENTE | MATRICOLA
    Giorgio|20|1.3|30495

    private String name;
    private int points;
    private double coefficient;
    private int id; //o String se matricola alfanumerica

    Un costruttore specifico per la tua classe Studente :

    public Studente(String na,int po,double coeff,int id){
    this.name = na;
    this.points = po;
    this.coefficient = coeff;
    this.id = id;
    }

    getter and setters per i fields creati sopra come d'abitudine...

    In una classe separata puoi creare un metodo o lavorare direttamente nel main :

    Ogni volta che leggi una riga di testo puoi fare parsing della riga per dividere le info di cui hai bisogno con :

    String[] tmp = rigaLetta.split("|")

    Puoi creare adesso un oggetto studente :
    Studente studente = new Studente(tmp[0],tmp[1],tmp[2],tmp[3]);

    e magari aggiungero ad un ArrayList<Studente> se vuoi tenerli tutti in un insieme e poi manipolarli.
  • Re: Creare oggetti da file

    Grazie mille,
    ho creato delle nuove classi chiamate Studente e FileDiTesto,

    nella classe FileDiTesto ho inserito il metodo leggiTesto()
    	public static void leggiTesto() throws IOException {
    
    		BufferedReader lettore = new BufferedReader(new FileReader("C:\\Users\\user\\Desktop\\studenti.txt")); 
    	    String riga = lettore.readLine();
    		
    		while(riga!=null) {
    			String[] studente = (riga.split(";"));
    			new Studente(studente[0], Integer.parseInt(studente[1]), Double.parseDouble(studente[2]), studente[3]);
    			riga = lettore.readLine();
    		}
    		
    		lettore.close();	
    	}
    In quella Studente:
    
    public class Studente {
    	private String nome;
    	private int punti;
    	private double coeff;
    	private String matr;
    	private static int conta=0;
    	
    	public Studente (String nome, int punti, double coeff, String matr) {
    		this.setNome(nome);
    		this.setPunti(punti);
    		this.setCoeff(coeff);
    		this.setMatr(matr);
    		conta++;
    	}
    
    
    	public String getNome() {
    		return nome;
    	}
    	public void setNome(String nome) {
    		this.nome = nome;
    	}
    
    
    	public int getPunti() {
    		return punti;
    	}
    
    
    	public void setPunti(int punti) {
    		this.punti = punti;
    	}
    	public double getCoeff() {
    		return coeff;
    	}
    	public void setCoeff(double coeff) {
    		this.coeff = coeff;
    	}
    	public String getMatr() {
    		return matr;
    	}
    	public void setMatr(String matr) {
    		this.matr = matr;
    	}
    	
    
    
    	public static int contaStudenti() {
    		return conta;
    	
    	}
    	
    }
    Ho notato che se uso Split("|") viene generato un errore, cosa che non succede usando ";" o "-". Come mai?

    Intanto studio un po' gli arraylist e provo a continuare come suggerito da magicsign.
  • Re: Creare oggetti da file

    Ho cambiato così ill codice nella classe FileDiTesto
    public class FileDiTesto {
    
    	public static ArrayList<Studente> leggiTesto() throws IOException {
    
    		ArrayList<Studente> listaStudenti = new ArrayList<Studente>();
    
    		BufferedReader lettore = new BufferedReader(new FileReader("C:\\Users\\user\\Desktop\\studenti.txt")); 
    	    String riga = lettore.readLine();
    		
    		while(riga!=null) {
    			String[] studente = (riga.split(";"));					
    			listaStudenti.add(new Studente(studente[0], Integer.parseInt(studente[1]), Double.parseDouble(studente[2]), studente[3]));
    			riga=lettore.readLine();
    		}
    		
    		lettore.close();
    		return listaStudenti;
    	}
    }
    Posso ''separare'' la lettura dei dati con la creazione dell'arrayList?
  • Re: Creare oggetti da file

    Scusa mi sono dimenticato l'escape character :

    String tmp = "Giorgio|20|1.3|30495";
    String[] res = tmp.split("\\|");

    Puoi separare la lettura di testo con la creazione studenti creando un altro metodo eventualmente, esempio :

    //leggo stringa e split in array di String
    //passo array di String ad un metodo che crea studente : creaStudente(String[] input)
  • Re: Creare oggetti da file

    magicsign ha scritto:


    Scusa mi sono dimenticato l'escape character :

    String tmp = "Giorgio|20|1.3|30495";
    String[] res = tmp.split("\\|");

    Puoi separare la lettura di testo con la creazione studenti creando un altro metodo eventualmente, esempio :

    //leggo stringa e split in array di String
    //passo array di String ad un metodo che crea studente : creaStudente(String[] input)
    Grazie mille ancora
    Ho scelto di farlo rimanere cosi com'è per il momento.
    Ora vorrei che il programmino mi segnalasse se ci sono due o piu studenti con numero matricola uguali. Puoi darmi una mano..?
  • Re: Creare oggetti da file

    Ciao ti consiglio di sforzarti a risolvere l'esercizio, e' il modo migliore per imparare a programmare

    Un suggerimento che posso darti e' di scorrere tutta la lista ArrayList creata con una certa condizione e ritornare un boolean se ci sono studenti con matricola uguale, potresti creare un metodo a parte che faccia questo.
  • Re: Creare oggetti da file

    magicsign ha scritto:


    Ciao ti consiglio di sforzarti a risolvere l'esercizio, e' il modo migliore per imparare a programmare
    Si hai ragione, infatti sto provando ad aggiungere sempre qualcosa di nuovo anche se non è richiesto dall'esercizio.

    magicsign ha scritto:


    Un suggerimento che posso darti e' di scorrere tutta la lista ArrayList creata con una certa condizione e ritornare un boolean se ci sono studenti con matricola uguale, potresti creare un metodo a parte che faccia questo.
    L'ho scritto così. pare funzionare...
    
    public static void MatricoleUguali(ArrayList<Studente> lista) {
    	
    	int i=0;
    	int j=0;
    	
    	for(i=0; i<lista.size(); i++) {
    		for (j=i+1; j<lista.size(); j++) {
    			if (lista.get(i).getMatr().equals(lista.get(j).getMatr()))  {
    				System.out.println("ATTENZIONE! Due stuenti hanno lo stesso numero matricola");		
    			}
    		}
    	}	
    }
    
Devi accedere o registrarti per scrivere nel forum
8 risposte