Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
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: 2782
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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Il nucleo della cometa interstellare 3I/...
La Russia potrebbe sviluppare un'arma pe...
Manda la RAM Corsair in assistenza, rice...
ASUS ROG G1000 con 'AniMe Holo': saranno...
Un test di longevità ha messo alla prova...
Incat inizia i test dell'incredibile tra...
LG Sound Suite: al CES il sistema audio ...
Avengers Doomsday, il primo trailer &egr...
La crisi delle memorie non farà sconti a...
Il trailer più atteso dell'anno &...
I gamer vogliono i monitor OLED: sopratt...
Samsung alza l’asticella dei televisori ...
Energie rinnovabili 2025: quasi 42% del ...
Le auto elettriche volano in tutta Europ...
Nuovo look per la finestra Esegui su Win...
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: 22:04.


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