Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Sostituire stringa in file eml

    Salve ho un file .eml e devo sostituire una stringa in questo file. Qualcuno saprebbe aiutarmi su come fare ? non posso usare file txt , perchè altrimenti perdo la formattazione del file .eml ! Consigli?
    grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Un file EML (un file che rappresenta una mail), è un banalissimo file di testo in cui, per ragioni storiche, ciascuna riga non può superare i 76 caratteri. Se la riga li supera, va aggiunto un marcatore prima di portarla a capo.

    Quindi, si tratta solo di tener conto di questo fatto nel momento in cui si va a scrivere la riga modificata:

    codice:
    String strModificata = ...;   // Ho la stringa modificata da scrivere nel file
    String daScrivere = normalizza( strModificata );
    
    // Scrivo sul file la stringa "daScrivere"
    ...
    
    private String normalizza(String line) {
       StringBuilder ret = new StringBuilder();
       while(line.length() > 75) {
          ret.append(line.substring(0, 75)).append('=').append( System.getProperty("line.separator") );
          line = line.substring(75);
       }
       if (line.length() > 0) ret.append( line );
       return ret.toString();
    }

    Ciao.
    Ultima modifica di LeleFT; 10-03-2014 a 15:46
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    il fatto è che il mio file è gia scritto e formattato , devo sostituire solo una parola all'interno del testo, come una specie di find replace! Cioè devo cancellare una parola e inserirne un'altra! Non devo creare il file da 0!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Non devo creare il file da 0!
    Il file comunque lo devi riscrivere completamente. Puoi leggere tutto quanto, metterlo in memoria, fare la/e sostituzione/i in memoria e poi riscrivere tutto su file oppure leggere man mano (es. una riga o blocco di caratteri per volta) e "al volo" scrivere ciò che leggi eventualmente modificato.
    Quale dei due approcci dipende da cosa/quanto devi cambiare, dal tipo e della struttura del file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    quale stream mi consigli per leggere questo file ?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    quale stream mi consigli per leggere questo file ?
    Banalmente... un BufferedReader costruito su un FileReader per la lettura.
    Un PrintWriter, costruito su un BufferedWriter, costruito a sua volta su un FileWriter per la scrittura.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    codice:
    public void sendMail() throws MessagingException, FileNotFoundException, IOException {
           Properties prop=new Properties();
            // Creazione di una mail session
            prop.load(new FileInputStream("mail.properties"));
            String mitt=Mail.getMitt();
            String s;
            String pwd=Mail.getpwd();
            String host=Mail.getHost();
            StringBuilder s1=new StringBuilder();
            Session session = Session.getDefaultInstance(prop, new MailAuthenticator(mitt, pwd));
            session.setDebug(true);
            FileReader fr=new FileReader(Mail.mailFile);        
            // Creazione del messaggio da inviare
            
            BufferedReader br=new BufferedReader(fr);
            File tmp=new File("emailtemp.eml");
            FileWriter fw=new FileWriter(tmp);
            while((s=br.readLine())!=null){
                s1.append(s);
            }
            String s2=s1.toString();
            PrintWriter pw=new PrintWriter(fw);
            pw.print(s2);
            pw.close();
            fw.close();
            InputStream source=new FileInputStream(tmp);
            MimeMessage message = new MimeMessage(session,source);
           //  message.setSubject(oggetto);
           // message.setText(testoEmail);
         
            // Aggiunta degli indirizzi del mittente e del destinatario
            InternetAddress fromAddress = new InternetAddress(mitt);
            InternetAddress toAddress = new InternetAddress(dest);
            message.setFrom(fromAddress);
            message.setRecipient(Message.RecipientType.TO, toAddress);
    
    
            // Invio del messaggio
            Transport transport = session.getTransport("smtps"); 
            transport.connect(host, mitt, pwd);
            Transport.send(message);
            transport.close();
    
    
        }
    cerco di leggere il file e di scriverlo in un altro file . Cosa sbaglio ? il nuovo file è praticamente vuoto !!

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Senza entrare nel merito della gestione delle eccezioni e del corretto modo di gestire i files, non capisco perchè tu non stia facendo l'analisi della riga da scrivere (per vedere se supera i famosi 76 caratteri).

    Ad ogni modo, riporto qui sotto il tuo codice con i commenti di ciò che fa, così puoi renderti conto di quali possano essere le problematiche:

    codice:
    // Qui io presumo che "Mail.mailFile" sia una stringa contenente
    // il percorso completo al file da leggere. Se non è così o se
    // punta ad un file inesistente, ovviamente non farà nulla di tutto
    // ciò che si prevede nel codice
    FileReader fr=new FileReader(Mail.mailFile);
    
    // Ok
    BufferedReader br=new BufferedReader(fr);
    
    // Non è necessario, però OK
    // Il nuovo file verrà creato nella Working Directory!
    File tmp=new File("emailtemp.eml");
    
    // OK
    FileWriter fw=new FileWriter(tmp);
    
    // In questo ciclo, scorri il file da leggere e concateni
    // tutte le righe in un'unica riga all'interno dello StringBuilder
    // (ricorda che readLine() butta via il carattere di newLine!)
    // Quindi, se il file originale è questo:
    //
    // Prima Riga
    // Seconda Riga
    // Terza Riga
    //
    // Nello StringBuilder avrai:
    //
    // Prima RigaSeconda RigaTerza Riga
    while((s=br.readLine())!=null){
       s1.append(s);
    }
    
    // Qui ottieni il contenuto dello StringBuilder in una stringa
    String s2=s1.toString();
    
    // OK
    PrintWriter pw=new PrintWriter(fw);
    
    // Scrivi nel file UNA SOLA RIGA contenente tutte le righe
    // del file originale, appiccicate una accanto all'altra
    pw.print(s2);
    
    // Chiudi il file senza aver effettuato alcun flush()
    // Quindi non c'è nessuna garanzia che i dati vengano effettivamente
    // scritti
    pw.close();
    
    // Questo è del tutto inutile, lo stream è già stato chiuso
    // dall'istruzione precedente
    fw.close();

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    ok risolto però devo sostituire 5 trattini ----- che stanno all'interno del file con una nuova stringa : ma non viene
    codice:
    s1.toString().replaceFirst("\\-{5}", this.score);

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Il risultato di quell'operazione è assegnato a qualcosa?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.