Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-05-2010, 11:54   #1
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
[JAVA] JTable e file

Ciao a tutti ho un problema che non riesco a risolvere...
Sto creando una rubrica che scrive in un file.txt i vari dati e dovrei poi leggerli e inserirli in una JTable ma non riesco..qualcuno può aiutarmi??
Grazie
naymix è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2010, 22:13   #2
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Una volta messi in un array di stringhe è un gioco da ragazzi: c'è un costruttore apposta. Se hai problemi posta uno spezzone di codice.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 12:39   #3
Cap_Snake8
Junior Member
 
Iscritto dal: Apr 2010
Messaggi: 2
è abbastanza semplice:
Una volta che leggi il file, dividi i vari campi dai quali crei una matrice di stringhe,
supponiamo tu abbia una cosa del genere:

nome: numero:
bianchi 1234567890
rossi 0987654321

Poi basta passare la matrice al costruttore di JTable:

JTable tabella=new JTable(matriceRubrica,campi);

matriceRubrica è la matrice che contiene i nomi e numeri ecc..
campi è un vettore che serve per dare i nomi alle colonne della tabella, sarà composto per esempio da:{"nome","numero","indirizzo",ecc...}
Cap_Snake8 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 15:35   #4
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
ho un problema.. per creare la matrice devo sapere il numero di righe e colonne, il numero delle colonne ce l'ho mentre per trovare il numero di righe uso questo:
Codice:
input = new BufferedReader(new FileReader("agenda.txt"));
	while(input.readLine() != null)
	{
		numRighe++;
	}
Ovviamente dopo non riesco a inserire i dati nella matrice perché se faccio un nuovo readLine() mi arriva una stringa null. Avrei bisogno di tornare all'inizio del file e mi chiedo: esiste un metodo o devo chiudere e aprire di nuovo il file?
naymix è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 16:02   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Codice:
input = new BufferedReader(new FileReader("agenda.txt"));
List<String> lines = new ArrayList<String>();
String line = null;
while((line=input.readLine()) != null)
{
    // line contiene la riga letta
    lines.add(line);
}
Al termine del ciclo hai in memoria la lista di tutte le righe lette dal file; una chiamata a lines.size() è sufficiente per sapere quante righe hai letto. Inoltre puoi trasformare la volo la List<String> nell'equivalente array di String con il metodo toArray().
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 18-05-2010 alle 16:05.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 16:46   #6
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
Il problema è che devo dividere le singole voci che ho nella riga...
mi spiego meglio io salvo in un file le informazioni in questo modo:
pinco|pallino|3309099981|[email protected]|
in modo tale che con StringTokenizer riesca a dividere i campi..
Come faccio con la List a fare questo?
Intanto posto come l'ho risolto io anche se il chiudere e il riaprire il file mi fa un pò schifo XD
Codice:
private void leggiFile()
	{
		int numRighe = 0;
		int i, j;
		BufferedReader input = null;
		String s;
		try
		{
			input = new BufferedReader(new FileReader("agenda.txt"));
			while(input.readLine() != null)
			{
				numRighe++;
			}
			riga = new String[numRighe][NUM_COLONNE];
			input.close();
		}catch(FileNotFoundException exc)
		{
			System.out.println("Problema apertura file");
			System.exit(0);
		}
		catch(IOException e)
		{
			System.out.println("Errore lettura");
		}
		try
		{
			input = new BufferedReader(new FileReader("agenda.txt"));
			for(i = 0; i < numRighe; i++)
			{
				s = input.readLine();
				StringTokenizer str = new StringTokenizer(s, "|");
				for(j = 0; j < NUM_COLONNE; j++)
				{
					riga[i][j] = str.nextToken();
				}
			}
			input.close();
		}catch(FileNotFoundException exc)
		{
			System.out.println("Problema apertura file");
			System.exit(0);
		}
		catch(IOException e)
		{
			System.out.println("Errore lettura");
		}
	}
naymix è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 17:07   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Usa una lista di array di Stringhe.
- la lista, essendo dinamica ti permette di inserire un nuovo array di Stringhe per ogni riga letta dal file;
- il singolo array di Stringhe (la dimensione è nota dato che sai quale è il numo di colonne) rappresenta una riga appena letta e ridotta in token.
Così fai tutto in un ciclo.

Per strutturare il codice, potresti partire risolvendo il problema più piccolo: quello del parsing/token di una riga.
Lo fai definendo un metodo che prende in input una riga (String) e sputa in output la riga ridotta in token (String[]).

A quel punto risolvi l'altro problema:
quello della lettura delle singole righe da file.
Lo fai definendo un metodo che prende in input il nome di un file (String) e sputa in output tutte le rige lette e ridotte in tokens (List<String[]>).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 17:15   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Codice:
DefaultTableModel model = new DefaultTableModel(0, numero di colonne);
String text = new Scanner(il file).useDelimiter("\\Z").next();
for(String line : text.split("\n")) {
   model.addRow(line.split("\\|"));
}
JTable table = new JTable(model);
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 17:19   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Codice:
DefaultTableModel model = new DefaultTableModel(0, numero di colonne);
String text = new Scanner(il file).useDelimiter("\\Z").next();
for(String line : text.split("\n")) {
   model.addRow(line.split("\\|"));
}
JTable table = new JTable(model);
Così non vale: hai usato le regex
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 17:30   #10
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
mmm farò con calma stasera e ti dirò
intanto grazie per l'aiuto
naymix è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 20:04   #11
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
Dopo un po di tempo a pensare ho deciso di salvare le righe in un vector, dopodiché le estraggo e le suddivido con il StringTokenizer e le inserisco nella matrice di String ecco il codice:
Codice:
	private void leggiFile()
	{
		int numRighe = 0;
		Vector<String> s2 = new Vector<String>();
		int i, j;
		BufferedReader input = null;
		String s = null;
		try
		{
			input = new BufferedReader(new FileReader("agenda.txt"));
			while((s = input.readLine()) != null)
			{
				s2.addElement(s);
			}
			numRighe = s2.size();
			riga = new String[numRighe][NUM_COLONNE];
			for(i = 0; i < numRighe; i++)
			{
				s = s2.elementAt(i);
				StringTokenizer str = new StringTokenizer(s, "|");
				for(j = 0; j < NUM_COLONNE; j++)
				{
					riga[i][j] = str.nextToken();
				}
			}
			input.close();
		}catch(FileNotFoundException exc)
		{
			System.out.println("Problema apertura file");
			System.exit(0);
		}
		catch(IOException e)
		{
			System.out.println("Errore lettura");
		}
	}
naymix è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 21:52   #12
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da naymix Guarda i messaggi
mmm farò con calma stasera e ti dirò
intanto grazie per l'aiuto
Fai come vuoi, ma la soluzione postata da PGI è decisamente migliore e più sintetica (io stavo scherzando con lui, se non sai cosa sono le espressioni regolari portresti cogliere l'occasione per leggere qualcosa in merito perchè potrebbero tornarti utili in futuro).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2010, 08:30   #13
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
Ho notato che è decisamente sintetico rispetto al mio devo ancora guardarlo perché non l'ho ma visto XD
Cmq mi servirebbe lo stesso un array per poi ordinare gli elementi e fare ricerche
naymix è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2010, 09:30   #14
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da naymix Guarda i messaggi
Ho notato che è decisamente sintetico rispetto al mio devo ancora guardarlo perché non l'ho ma visto XD
Cmq mi servirebbe lo stesso un array per poi ordinare gli elementi e fare ricerche
Bhe, visto che ti appoggi a Swing e usi una JTable puoi sfruttare i meccanismi di sorting (e filtering) che questo framework mette a disposizione.

In particolare si tratta della classe java.swing.table.TableRowSorter, e qui trovi un toturial introduttivo di massima sull'uso della JTable, che spiega brevemente come realizzare un sorting.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2010, 13:20   #15
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
Cavolo fanstatico..non l'avevo letta quella parte. Ora provo a implementare l'espressione regolare e l'ordinamento
naymix è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2010, 14:05   #16
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
L'espressione regolare funziona alla grande volevo chiedere però un chiarimento...
Codice:
String text = new Scanner(new FileReader("agenda.txt")).useDelimiter("\\Z").next();
Cosa fa di preciso questra istruzione?
Ho capito che la stringa text prende il contenuto del file agenda.txt ma .useDelimiter e .next() cosa fanno?
naymix è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2010, 14:19   #17
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2790
Quote:
Originariamente inviato da naymix Guarda i messaggi
L'espressione regolare funziona alla grande volevo chiedere però un chiarimento...
Codice:
String text = new Scanner(new FileReader("agenda.txt")).useDelimiter("\\Z").next();
Cosa fa di preciso questra istruzione?
Ho capito che la stringa text prende il contenuto del file agenda.txt ma .useDelimiter e .next() cosa fanno?
Con next() chiedi allo Scanner il prossimo token che, avendo scelto come delimitatore \\Z (un carattere speciale per definire la fine della stringa di input cui fa riferimento Scanner), corrisponde all'intero contenuto del file.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2010, 14:19   #18
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da naymix Guarda i messaggi
L'espressione regolare funziona alla grande volevo chiedere però un chiarimento...
Codice:
String text = new Scanner(new FileReader("agenda.txt")).useDelimiter("\\Z").next();
Cosa fa di preciso questra istruzione?
Ho capito che la stringa text prende il contenuto del file agenda.txt ma .useDelimiter e .next() cosa fanno?
Sono due metodi della classe Scanner (java.util.Scanner).
Il primo imposta il "delimiter" da usare come separatore dei token da usare per parserizzare la sorgente input a cui si è collegato le scanner, il secondo restituisce la prossima occorrenza.
In questo caso si è comandato allo scanner di usare come separatore dei token la fine della sorgente di input (immagino \Z stia per EOF) e di restituire il prossimo (l'unico) token.
I Javadoc spiegano tutto.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2010, 14:41   #19
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Tieni conto che la soluzione appare più sintetica per lo più perchè non gestisce le eccezioni. In "produzione" la cosa diventerebbe per lo meno:

Codice:
Scanner in = null;
String text = null;
try {
    text = (in = new Scanner(il file)).useDelimiter("\\Z").next();
} catch(IOException ex) {
    ex.printStackTrace();
} finally {
    if(in != null) {
        in.close();
    }
}
if(text != null) {
    ...eccetera
}
Questo ad evitare che il flusso resti aperto per più tempo dello stretto necessario.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2010, 14:54   #20
naymix
Junior Member
 
Iscritto dal: May 2010
Messaggi: 10
Grazie ora mi è più chiaro
Il problema ora è che devo fare in modo che le righe siano già ordinate quando apro il frame però per ora riesco solo a ordinarle premendo l'intestazione di colonna.
naymix è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Sospesi i lavori di riparazione delle pe...
Formula V vi farà cambiare l'airf...
Netflix usa l'IA generativa per battere ...
Quando l'AI costruisce sé stessa:...
Meno ventole, più raffreddamento:...
Adidas Trionda: come funziona la tecnolo...
Withings BodyFit, la bilancia che va ben...
QNAP annuncia QuTS hero h6.0: il sistema...
ColorOS 17 con Android 17: la lista dei ...
DDR4, il ritorno che nessuno si aspettav...
Corsair vuole un singolo cavo per colleg...
Linux 7.2 si avvierà sui Mac M3, ...
Xiaomi 17T e 17T Pro a prezzi mai visti:...
Microsoft annuncia Majorana 2 e prevede ...
Windows 11: addio ai menu contestuali ca...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v