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 03-09-2005, 18:31   #1
Abdujaparov
Senior Member
 
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
Lettura scrittura file con java

Salve a tutti ho provato a scrivere una classe che mi permette di leggere e memorizzare alcune stringhe in un file.
Il file su cui opero si chiama infor.txt ed è nella directory file mentre la classe java che lo utilizza è nel package codice. Sia file che codice sono nella stessa cartella.
Il file infor.txt deve ed è organizzato in questo modo:

server: //qua c'è del testo

porta: //qua c'è del testo

database: //qua c'è del testo

user: //qua c'è del testo

password: //qua c'è del testo


La classe che ho scritto è questa:

package codice;


import java.io.*;
import javax.swing.JOptionPane;

public class LeggiScriviDati {

private FileReader filer;
private FileWriter filew;

public LeggiScriviDati() {
super();
try{
FileReader filer = new FileReader("..\\file\\infor.txt");
FileWriter filew = new FileWriter("..\\file\\infor.txt");
}catch(Exception e){JOptionPane.showMessageDialog(null, "File non trovato.", "Errore file", JOptionPane.ERROR_MESSAGE);}
}

public String[] getParametri(){
String[] parametri = new String[5];
try{
BufferedReader in = new BufferedReader(filer);
while (in.ready()){
String buffer = in.readLine();
if ((buffer.indexOf("server:")) >=0)
parametri[0]=buffer.substring(buffer.indexOf(":")+1);
else if((buffer.indexOf("porta:")) >=0)
parametri[1]=buffer.substring(buffer.indexOf(":")+1);
else if((buffer.indexOf("database:")) >=0)
parametri[2]=buffer.substring(buffer.indexOf(":")+1);
else if((buffer.indexOf("user:")) >=0)
parametri[3]=buffer.substring(buffer.indexOf(":")+1);
else if((buffer.indexOf("password:")) >=0)
parametri[4]=buffer.substring(buffer.indexOf(":")+1);
in.close();
}
}catch(IOException e){JOptionPane.showMessageDialog(null, "Errore memorizzazione dati.", "Errore", JOptionPane.ERROR_MESSAGE);;}
return parametri;
}

public void setParametri(String[] parametri){
try{
BufferedReader in = new BufferedReader(filer);
PrintWriter out = new PrintWriter (filew);
while (in.ready()){
String buffer = in.readLine();
if ((buffer.indexOf("server:")) >=0)
out.print (buffer+parametri[0]);
else if((buffer.indexOf("porta:")) >=0)
out.print(buffer+parametri[1]);
else if((buffer.indexOf("database:")) >=0)
out.print(buffer+parametri[2]);
else if((buffer.indexOf("user:")) >=0)
out.print(buffer+parametri[3]);
else if((buffer.indexOf("password:")) >=0)
out.print(buffer+parametri[4]);
out.flush();
in.close();
out.close();
}
}catch(IOException e){JOptionPane.showMessageDialog(null, "Errore memorizzazione dati.", "Errore", JOptionPane.ERROR_MESSAGE);;}
}

}

//fine classe


Questo è il piccolo main che ho scritto per provare la classe:
public static void main(String[] args) {
LeggiScriviDati lsd = new LeggiScriviDati();
String[] parametri = new String[5];
parametri[0]="192.168.0.16";
parametri[1]="3306";
parametri[2]="tesi";
parametri[3]="tesi";
parametri[4]="juventus";

lsd.setParametri(parametri);

}

}

Qua sorgono i problemi, la classe mi viene compilata correttamente però se faccio partire il main mi viene subito data un'eccezione quando inzializzo la classe infatti mi compare la finestrella che dice file non trovato.
A cosa è dovuto il problema? Dove sbaglio? Il percorso del file mi sembra di averlo scritto correttamente e se metto il file nella stessa cartella del file class mi viene dato sempre lo stesso errore, che devo fare?
Ah un'ultima cosa c'è un metodo della classe String che permette di eliminare tutti gli spazi da una stringa?
Grazie a tutti, ciao ciao.

Ultima modifica di Abdujaparov : 03-09-2005 alle 18:31. Motivo: titolo incompleto
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 03-09-2005, 22:13   #2
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
c'e' qualche piccolo errore sintattico nel file che hai postato, in ogni caso l'eccezione ti viene lanciata nel costruttore perchè il file che vuoi aprire in lettura non esiste.
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 03-09-2005, 23:28   #3
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da Abdujaparov
FileReader filer = new FileReader("..\\file\\infor.txt");
FileWriter filew = new FileWriter("..\\file\\infor.txt");
i percorsi dei file in java si passano così:
Codice:
String percorso="c:/percorso/nome_file.estensione";
e poi controlla che il file ci sia, e se non c'è, crealo.
Questo ti consiglio di farlo facendo così:
Cattura una FileNotFoundException, e nel cetch crea il file, in modo che pure che non c'è, il file lo crei e poi puoi salvarci.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2005, 09:37   #4
Abdujaparov
Senior Member
 
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
Allora il file c'è sicuramente e provando a inserire il file nella cartella del class e modificando così il costruttore il file viene trovato.

Costruttore:
public LeggiScriviDati() {
try{
filer = new FileReader("infor.txt");
filew = new FileWriter("infor.txt");
}catch(IOException e){JOptionPane.showMessageDialog(null, e.getMessage(), "Errore file", JOptionPane.ERROR_MESSAGE);}
}

Ora per quanto riguarda i percorsi mi sembra di ricordare che i percorsi relativi e non assoluti si possano inserire, mi sembra di averlo visto non vorrei sbagliare.
Il percorso c:\ecc ecc è un percorso assoluto ma se un utente decide di mettere il programma in d:\pippo dovrebbe dare problemi ed a me serve che il programma parta sia in c: che in d:.
Poi un altro problema.
Provo a richiamare il metodo (mettendo il file nella stessa cartella del class):
public void setParametri(String[] parametri){
try{
BufferedReader in = new BufferedReader(filer);
PrintWriter out = new PrintWriter (filew);
while (in.ready()){
String buffer = in.readLine();
System.out.println("riga trovata:"+buffer);
if ((buffer.indexOf("server:")) >=0)
out.print (buffer+parametri[0]);
else if((buffer.indexOf("porta:")) >=0)
out.print(buffer+parametri[1]);
else if((buffer.indexOf("database:")) >=0)
out.print(buffer+parametri[2]);
else if((buffer.indexOf("user:")) >=0)
out.print(buffer+parametri[3]);
else if((buffer.indexOf("password:")) >=0)
out.print(buffer+parametri[4]);
out.flush();
in.close();
out.close();
}
}catch(IOException e){
JOptionPane.showMessageDialog(null, "Errore memorizzazione dati.", "Errore", JOptionPane.ERROR_MESSAGE);
}
}

Il metodo dovrebbe inserire i parametri passati nel file ma invece non fa nulla e quello che mi lascia un pò stupito è che la riga:
System.out.println("riga trovata:"+buffer);
Non viene mai stampata, come se nel file non ci fosse nulla e in.ready() sia false, dove in è:
BufferedReader in = new BufferedReader(filer);
A cosa può essere dovuto questo comportamento?
Grazie a tutti, ciao ciao.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2005, 10:50   #5
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Scusa, magari non c'entra niente, ma io farei così:
Codice:
boolean more=true;
String buffer="";
while(more){
String dato=in.readLine();
if(dato==null){
more=false
break;
}
else
buffer+=dato;
//e poi continuo con il resto del codi
e vedi quello che succede.
Inutile chiederti se il vettore di parametri che gli passi è pieno, vero???
__________________
My gaming placement

Ultima modifica di franksisca : 04-09-2005 alle 10:51. Motivo: mi ero dimentiocato il break;
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2005, 17:57   #6
ABCcletta
Senior Member
 
L'Avatar di ABCcletta
 
Iscritto dal: Sep 2004
Città: Ovunque
Messaggi: 5804
Invece di FileReader e FileWriter utilizza gli stream.

FileInputStream fis = new FileInputStream(new File("path_del_file"));
DataInputStream dis = new DataInputStream(fis);

FileOutputStream fos = new FileOutputStream(new File("path_del_file"));
PrintStream ps = new PrintStream(fis);


per leggere una riga da file utilizzi:

dis.readLine();

per scrivere una riga su file utilizzi:

ps.println();


Quando finisci, ricorda di chiudere gli stream col metodo .close()
ABCcletta è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2005, 21:42   #7
Abdujaparov
Senior Member
 
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
Ho provato a seguire il tuo consiglio però dalle api leggo che il metodo readLine() di DataInputStream è deprecatoe mi viene detto di sostituirlo nel seguente modo:
DataInputStream d = new DataInputStream(in);


with:

BufferedReader d
= new BufferedReader(new InputStreamReader(in));


Seguendo le indicazioni ho modificato così il codice, per adesso ho provato solo la lettura ed ecco il codice:
public LeggiScriviDati() {
try{
file = new File("infor.txt");
//filer = new FileReader(file);
//filew = new FileWriter(file);
fis = new FileInputStream(file);
//dis = new DataInputStream(fis);
fos = new FileOutputStream(file);
//ps = new PrintStream(fos);
}catch(IOException e){JOptionPane.showMessageDialog(null, e.getMessage(), "Errore file", JOptionPane.ERROR_MESSAGE);}
}

public String[] getParametri(){
String[] parametri = new String[5];
System.out.println("Entro nel metodo get");
try{
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
System.out.println("condizione d'ingresso:"+(in.ready()));
while (in.ready()){
String buffer = in.readLine();
System.out.println("riga trovata:"+buffer);
if ((buffer.indexOf("server:")) >=0)
parametri[0]=buffer.substring(buffer.indexOf(":")+1);
else if((buffer.indexOf("porta:")) >=0)
parametri[1]=buffer.substring(buffer.indexOf(":")+1);
else if((buffer.indexOf("database:")) >=0)
parametri[2]=buffer.substring(buffer.indexOf(":")+1);
else if((buffer.indexOf("user:")) >=0)
parametri[3]=buffer.substring(buffer.indexOf(":")+1);
else if((buffer.indexOf("password:")) >=0)
parametri[4]=buffer.substring(buffer.indexOf(":")+1);
in.close();
}
}catch(IOException e){JOptionPane.showMessageDialog(null, "Errore memorizzazione dati.", "Errore", JOptionPane.ERROR_MESSAGE);;}
return parametri;
}
Se richiamo il metodo getParametri ottengo che vengono stampate le stringhe:
"Entro nel metodo get"
e la stringa che mi stampa la condizione del ciclo while:
"condizione d'ingresso:"+(in.ready())
questa condizione è false e non capisco il perchè, il file contiene delle stringhe perchè questa condizione è false?
L'array che passavo prima, per rispondere a franksisca non era vuoto ma conteneva delle stringhe queste per la precisione:
String[] parametri = new String[5];
parametri[0]="192.168.0.16";
parametri[1]="3306";
parametri[2]="tesi";
parametri[3]="tesi";
parametri[4]="juventus";

Come posso fare? Devo per forza poter scrivere su file, vi prego aiutatemi.
Ho provato anche a mettere true come condizione del ciclo while però in.readLine() mi ritorna null.
Grazie, ciao ciao.

Ultima modifica di Abdujaparov : 05-09-2005 alle 21:47.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2005, 22:09   #8
ABCcletta
Senior Member
 
L'Avatar di ABCcletta
 
Iscritto dal: Sep 2004
Città: Ovunque
Messaggi: 5804
Scusa, ho sbagliato. Il metodo esatto da usare quando usi un DataInputStream è readUTF().

Comunque va benissimo il BufferedInputStream in modo da fare lettura bufferizzata.

Il mio consiglio è quello di cambiare il ciclo.
Direi che puoi effettuare una cosa del genere:

String temp = null;
while( (temp=in.readLine()) != null ) {

}

In questo modo quando non viene letto nulla dal file si esce dal ciclo direttamente...
ABCcletta è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2005, 23:58   #9
Abdujaparov
Senior Member
 
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
Il problema è proprio questo la condizione che uso io verifica se c'è ancora qualcosa nel file se trova null esce dal ciclo solo che questa condizione è automaticamente false. Ho provato ad eliminare la condizione e ad impostarla a true per vedere cosa prendeva dal file di testo però prende null come parametro è mi lancia un'eccezione appena prende null. Il problema è che non legge assolutamente nulla dal file ed il file non è vuoto perchè contiene questo:

server:
porta:
database:
user:
password:

Come posso fare per fargli leggere da file?
Grazie ancora per la pazienza.
Ciao ciao.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 00:02   #10
ABCcletta
Senior Member
 
L'Avatar di ABCcletta
 
Iscritto dal: Sep 2004
Città: Ovunque
Messaggi: 5804
Quote:
Originariamente inviato da Abdujaparov
Il problema è proprio questo la condizione che uso io verifica se c'è ancora qualcosa nel file se trova null esce dal ciclo solo che questa condizione è automaticamente false. Ho provato ad eliminare la condizione e ad impostarla a true per vedere cosa prendeva dal file di testo però prende null come parametro è mi lancia un'eccezione appena prende null. Il problema è che non legge assolutamente nulla dal file ed il file non è vuoto perchè contiene questo:

server:
porta:
database:
user:
password:

Come posso fare per fargli leggere da file?
Grazie ancora per la pazienza.
Ciao ciao.

Allora, innanzitutto, ti RIconsiglio di utilizzare il while come te l'ho postato più su. Poi, ho un dubbio. Hai inserito il file nella cartella giusta? Potrebbe essere che stai sbagliando cartella, a quel punto l'istruzione <File f = new File("xxx.xxx")> creerebbe un file nuovo ma vuoto, da qui, il null...
ABCcletta è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 02:36   #11
pinok
Senior Member
 
Iscritto dal: Jun 2001
Città: Alessandria (provincia)
Messaggi: 4772
Scusa se non ti dico niente sul tuo codice, mi sembrava un po' lungo da leggere e non ho molto tempo.
Ti posto il codice che uso io per leggere un file di configurazione semplice, formato da commenti (iniziano con #).
La parte che ti può essere utile è

this.getClass().getResourceAsStream(configFile)

con la quale ottieni un inputStream del file indicato come percorso relativo a partire da dove si trova la classe che contiene il codice in questione.

Config è un bean a parte per gestire la configurazione.

Codice:
private Config readConfiguration (String configFile) throws Exception
{
  InputStream is = this.getClass().getResourceAsStream(configFile);
  BufferedReader in = new BufferedReader(new InputStreamReader(is));

  Config config = new Config();
		
  while (true)
  {
    String linea = in.readLine();
    if (linea==null) break;
    else
    {
      linea = linea.trim();
      if (!linea.startsWith("#"))	// Salto i commenti
      {
         if (linea.startsWith("server: ")) config.setServer(linea.substring("server:".length()));

         if (linea.startsWith("port: ")) config.setPort(linea.substring("port:".length()));

         // ecc. per tutte le configurazioni
      }
    }
  }
  
  in.close();
  is.close();
  	
  return config;
}

Ultima modifica di pinok : 06-09-2005 alle 02:41.
pinok è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 17:24   #12
Abdujaparov
Senior Member
 
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
Finalmente sono riuscito a leggere dal file evvia!
Ho utilizzato il codice postato da pinok scrivendolo in questo modo:

private String configFile;

public ProvaLettura() {
configFile = "..\\file\\promo.txt";
}

public String[] readConfiguration () throws Exception
{
InputStream is = this.getClass().getResourceAsStream(configFile);
BufferedReader in = new BufferedReader(new InputStreamReader(is));

String[] config = new String[5];

while (true)
{
String linea = in.readLine();
if (linea==null) break;
else
{
linea = linea.trim();
if (!linea.startsWith("//")) // Salto i commenti
{
if (linea.startsWith("server: "))
config[0]=linea.substring("server:".length()).trim();

if (linea.startsWith("port: "))
config[1]=linea.substring("port:".length()).trim();

if (linea.startsWith("database: "))
config[2]=linea.substring("database:".length()).trim();

if (linea.startsWith("utente: "))
config[3]=linea.substring("utente:".length()).trim();

if (linea.startsWith("password: "))
config[4]=linea.substring("password:".length()).trim();

}
}
}

in.close();
is.close();

return config;
}

La lettura funziona anche inserendo il path relativo del file, ringrazio tutti ora provo a scrivere nel file, in pratica devo creare un metodo che sostituisca, nel file letto in precedenza, nuovi parametri a quelli prima ottenuti.
Grazie a tutti, ciao ciao.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 17:39   #13
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
Perchè non provi ad usare i file properties?
forse è meglio per il tuo caso

[code]

public class Sneto2 {

/*
Creo il metodo getParamConnection
questo metodo legge e memorizza le chiavi valori del file miofile.properties
param filename dico quale file deve andardi a leggere
@return un Hashtable contente le chiavi valori
*/
public Hashtable getParamConnection(String filename) throws IOException {
//Definisco Hashtable
Hashtable listconn = new Hashtable();

try{
//Gli passo il file da andare a leggere
InputStream is = this.getClass().getResourceAsStream(filename);
PropertyResourceBundle propertyresourcebundle = new PropertyResourceBundle(is);
is.close();
Enumeration enum = propertyresourcebundle.getKeys();
while (enum.hasMoreElements()){
System.out.println("Inizio");
String app_chiave = (String)enum.nextElement();
System.out.println("Chiave= " + app_chiave);
String app_valore = propertyresourcebundle.getString(app_chiave);
app_valore= app_valore.trim();
System.out.println("Valore= "+propertyresourcebundle.getString(app_chiave));
System.out.println("Fine*************");
System.out.println(" ");
listconn.put(app_chiave,app_valore);
}
}catch(Exception ex){
ex.printStackTrace();
}finally {
}
return listconn;

}

[code]
un file properties è fatto in questo modo

server=22.22.22
porta = 8080
texerasmo è 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 ...
Tory Bruno ha lasciato la società...
L'immagine di Natale del telescopio spaz...
STMicroelectronics e SpaceX proseguono l...
Numeri da record, Xiaomi distribuisce ol...
BitLocker accelerato via hardware: Micro...
Blue Origin prosegue lo sviluppo dei lan...
Moore Threads: nuove GPU 15 volte pi&ugr...
Steam diventa esclusivamente 64-bit: Val...
La Corte Suprema restituisce a Elon Musk...
X lancia Creator Studio su mobile: nuovi...
Dieci anni fa SpaceX fece atterrare per ...
POCO M8 e M8 Pro arriveranno nel 2026: e...
Caos Formula 1: il motore Mercedes &egra...
Tariffe nazionali per le chiamate e gli ...
Tassa chilometrica non solo per elettric...
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: 00:58.


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