Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-05-2010, 12: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, 23: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, 13: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, 16: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, 17: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 17:05.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 17: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, 18: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, 18: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, 18: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, 18: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, 21: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, 22: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, 09: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, 10: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, 14: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, 15: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, 15:19   #17
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
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, 15: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, 15: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, 15: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


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
MrBeast entra nel fintech: Beast Industr...
Arrivano i nuovi server Bare Metal 2026 ...
Stop alla distribuzione dei driver di st...
Serie TV God of War: scelto anche l'atto...
Riot Games dimezza il team di 2XKO dopo ...
FRITZ! in super offerta su Amazon: ripet...
L'AI doveva farci lavorare meno: e se st...
DREAME X50 Ultra Complete a 899€ su Amaz...
Rimodulazione TIM: aumenti fino a 2,99 e...
Amazon sblocca i prezzi con coupon e sco...
Action cam Insta360 in super offerta su ...
Fallout 76 Sorgenti Brucianti: tanta car...
Scope elettriche super potenti a confron...
Tutti i Google Pixel 10 sono scontati su...
Report Legambiente 2025: Palermo, Milano...
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: 12:32.


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