View Full Version : [JAVA] gestire il contenuto di un .txt
ciao
allora, per un progetto devo salvare dei record composti da tot voci in un file txt
ovviamente per riconoscere un record da un altro o un campo da un altro userò un contatore intero nel primo caso e delle stringhe nel secondo, almeno credo
quali classi di java mi consigliate di usare?
qualcosa che permetta di lavorare su un txt e di fare operazioni con il suo contenuto, magari che sia anche abbastanza potente da permettermi di scandire il file, leggere cercare insomma....qualcosa di adatto...
grazie!
e se serializzi il contenuto dei record?? e poi salvi? la serializzazione consente di salvare su un file un "oggetto" java con i suoi metodi e le variabili (non static o transient)...
Originariamente inviato da Mazza2
e se serializzi il contenuto dei record?? e poi salvi? la serializzazione consente di salvare su un file un "oggetto" java con i suoi metodi e le variabili (non static o transient)...
non so cosa sia cmq il file txt deve contenere solo testo di questo genere (si tratta del sofware per la gestione di un distributore di CD musicali)
Record 1
Autore: xxx
Titolo: dgsud
Casa Discografica: dvusdgfla
Anno: 1234
Record 2
Autore: xxx
Titolo: dgsud
Casa Discografica: dvusdgfla
Anno: 1234
e ovviamente aandrà modificato a seconda dei CD disponibili con vari metodi addCD, removeCD ecc ecc
se vuoi lasciare tutto in chiaro, per scrivere il file ti consiglio un PrintWriter che col metodo println("stringa") ti permette di scrivere una riga di testo ed andare a capo.
per rileggere poi il file usa un BufferedReader che col metodo String readLine() legge una riga di testo alla volta e la restituisce
chiramente entrambi sono nel package java.io
abbiamo scoperto ora che la prof ha deto una classe scritta da lei GestioneFile....sembra buona ma non so se ha tutto quello che ci serve.....
se non va bene guarderò quella che mi hai detto
grazie mille;)
se hai voglia di fare le cose in maniera piu' elegante prevedi di salvare in XML le informazioni su file. Il tuo SW guadagnerà in flessibilità ;)
Originariamente inviato da kingv
se hai voglia di fare le cose in maniera piu' elegante prevedi di salvare in XML le informazioni su file. Il tuo SW guadagnerà in flessibilità ;)
uhm.....mi pare troppo...sul progetto c'è scritto che il file deve essere chiamato input.txt
non so se xml si faccia su un txt ma questo deve essere semplicemente un file di testo nromale....;) non posso (e non saprei) fare le cose in grande
Originariamente inviato da thefrog
non so se xml si faccia su un txt ma questo deve essere semplicemente un file di testo nromale....;) non posso (e non saprei) fare le cose in grande
un xml e' un normale file di testo che utilizza un altro file (lo schema o il dtd) per definire il formato.
se il tuo progetto non lo richiede lascia perdere, ma in futuro tieni conto che quando hai la necessità di salvare dei dati in formato non binario garantendo che siano trattabili con tool e linguaggi di programmazione differenti XML puo' essere una soluzione. ;)
texerasmo
06-07-2004, 13:26
Cmq non c'è bisogno di dichiarare uno schema oppure una dtd è meglio.:)
questo codice che ti scrivo crea un file xml è semplice da adattare al tuo caso se vuoi.
per provarlo devi avere
settato...
set CLASSPATH=%CLASSTPATH%;c:\javaxml\lib\xerces.jar;c:\javaxml\lib\jdom.jar;
se ti mancano i jar me lo dici che te li mando
import java.io.*;
import java.util.*;
/*
IMPORTIAMO I PACKAGE NECESSARI PER
LAVORATE CON GLI XML
/**/
import org.jdom.*;
import org.jdom.output.XMLOutputter;
public class CreaXML
{
public CreaXML(String nomeFile)
{
try
{
writeFile(nomeFile);
}catch(Exception e)
{
System.err.println ("errore: "+e);
}
}
public void writeFile(String path) throws Exception
{
File fileTmp = new File(path);
/*
ISTANZIAMO UN OGGETTO Element
PASSANDOGLI LA STRINGA
CHE SARA' IL NOME DEL NOSTRO SUPERTAG
/**/
Element root = new Element("root");
/*
ISTANZIAMO UN OGGETTO Document
PASSANDOGLI COME PARAMETRO L'OGGETTO
ELEMENT PRECEDENTEMENTE ISTANZIATO
/**/
Document documento = new Document(root);
/*
AGGIUNGIAMO AL NOSTRO ELEMENT UN
ATTRIBUTO:
<root attributo=valore>
/**/
root = root.setAttribute( "attributo","valore");
/*
ISTANZIAMO ALTRI OGGETTI Element
PASSANDOGLI LE STRINGHE
CHE SARANNO I NOMI DEI NOSTRI TAG
/**/
Element form = new Element("form");
Element nome = new Element("nome");
Element titolo = new Element("titolo");
Element copyright = new Element("copyright");
Element autore = new Element("autore");
Element fonte = new Element("fonte");
Element note = new Element("note");
//Element tagsito = new Element("tagsito");
Element body = new Element("body");
Element titolo_body = new Element("titolo_body");
Element sommario = new Element("sommario");
Element testo = new Element("testo");
Element img = new Element("img");
/*
ASSEGNAMO DEI VALORI AI
TAG param-name E param-value:
<param-name>mio nome</param-name>
/**/
nome.addContent("nome valore form");
titolo.addContent("titolo valore form");
copyright.addContent("copyright valore form");
autore.addContent("autore valore form");
fonte.addContent("fonte valore form");
note.addContent("note valore form");
// tagsito.addContent("tagsito valore sito");
titolo_body.addContent("titolo_body valore body");
sommario.addContent("sommario valore body");
testo.addContent("testo valore body");
img.addContent("img valore body");
/*
AGGIUNGIAMO I TAG param-name E
Param-value AL TAG init-param
/**/
form.addContent(nome);
form.addContent(titolo);
form.addContent(copyright);
form.addContent(autore);
form.addContent(fonte);
form.addContent(note);
body.addContent(titolo_body);
body.addContent(sommario);
body.addContent(testo);
body.addContent(img);
/*
AGGIUNGIAMO IL TAG init-param
AL SUPERTAG root
/**/
root.addContent(form);
root.addContent(body);
BufferedWriter out = null;
try
{
out = new BufferedWriter(new FileWriter(path));
/*
ISTANZIAMO LA CLASSE XMLOutputter
CHE CI PERMETTE DI FORMATTARE IL
FILE XML.
/**/
XMLOutputter xout = new XMLOutputter();
xout.setIndent(true);
xout.setNewlines(true);
/*
CON QUESTA ISTRUZIONE SCRIVIAMO
IL DOCUMENTO documento IN UN
BufferedWriter CHE CREA IL FILE
TRAMITE UN FileWriter
/**/
xout.output(documento,out);
}catch (IOException e)
{
System.err.println ("errore: "+e);
}finally
{
try
{
out.close();
}catch(IOException e)
{
System.err.println ("errore: "+e);
}
}
}
public static void main(String args[])
{
CreaXML crea = new CreaXML(args[0]);
}
}
Originariamente inviato da texerasmo
Cmq non c'è bisogno di dichiarare uno schema oppure una dtd è meglio.:)
spiegati :wtf:
texerasmo
06-07-2004, 15:30
puo utilizzare questa base di codice per riempire il contenuto dei tag con il rusultato del record.
esempio
<prova>$valore primo campo</prova>
in modo tale che alla fine lui avra un xml e non un file di testo.
Questo se vuole ascoltare il tuo suggerimento :)
La soluzione dell'XML è la migliore, ma sicuramente non quella che è richiesta a loro..
Il mio consiglio è di leggere il contenuto del file in una Stringa, e trattarla poi con i 2000 metodi messi a disposizione dalla classe String.
texerasmo
06-07-2004, 17:01
dipende sempre dall'utilizzo del file xml.
se l'ho si usa in una maniere furba da grossi vantaggi.
1) possiamo far comunicare + appicazioni con la stessa base dati
2) possiamo utilizzare xsl per trasformarlo in cio che vogliamo diversificare il tipo di output.
Per chi vuole, incominciare a vedere qualcosa gli suggeriusco di vedere cocoon che è un web-aplication di apache.
:)
ok ragazzi non ho usato XML anche perchè in questo progetto non bisogna usare niente, bisogna solo usare un txt come "database"
vorrei sapere una cosa:
per scrivere nel file stiamo usando java.io.RandomAccessFile
questa classe non ha metodi per cancellare.
come faccio a cancellare una riga?dovrei cancellarla e fare in modo da shiftare in su tutto quello che c'è sotto in modo da non lasciare righe vuote in quanto una riga vuota viene identificata come fineFile.
se non ci sono modi per farlo con questa classe mi consigliate qualche latra classe in grado di farlo?
(abbiamo pensato che potremmo tenere tutto memorizzato in un file di appoggio o una lista, e leggendolo ricopiare sul file tutto quello che ci serve tranne la riga da cancellare ma non mi sembra il top del top.... :stordita: )
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.