Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Scrivere file di testo

  1. #1

    Scrivere file di testo

    Salve,
    dovrei creare un file di testo con delle informazioni ottenute da un javaparser, faccio in questo modo

    codice:
    outputFile = new File(pathFinale);
            outputFW = new FileWriter(outputFile);
            buffWriter = new BufferedWriter(outputFW);
    poi ogni volta che devo scrivere qualcosa sul file uso, in un metodo questa chiamata
    codice:
    buffWriter.write(ci.isInterface() + "," + typeDeclaration.getName() + ",");
    in un altro questa
    codice:
    buffWriter.write(ModifierSet.isPublic(n.getModifiers()) + "," + n.getName() + ",\n");
    alla fine viene creato il file.txt in modo corretto, ma c'è qualcosa che non funziona come dovrebbe, in quanto, se usassi il file ottenuto per passarlo ad un'altra classe che si occupa di trasformare il txt in xml si verificano problemi, è come se le stringhe da
    codice:
    buffWriter.write(ModifierSet.isPublic(n.getModifiers()) + "," + n.getName() + ",\n");
    non facessero parte della stringa, infatti, richiamando

    codice:
    String[] leggiRiga = riga.split(",");
    
            int numeroTokenRiga = leggiRiga.length;
    il numero dei token non è giusto, ad esempio, supponendo che la prima riga del file contiene:

    codice:
    io, oggi, sono, false, arrabbiata, true, allegra
    il numero dei token restituiti sarà pari a 3 (fino a sono) e poi ricomincerà la numerazione per (false, arrabbiata) e una nuova numerazione per (true, allegra).

    Qualcuno sa dirmi dove sbaglio?
    Grazie

  2. #2
    Hai provato ad usare
    codice:
    \r\n
    
    buffWriter.write(ModifierSet.isPublic(n.getModifiers()) + "," + n.getName() + ",\r\n");
    come carattere di ritorno a capo?

    Ciao.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Premessa: le operazioni di scrittura e poi di lettura non hanno nulla a che vedere col tuo problema. Se sei sicuro che il file venga creato correttamente e, soprattutto, che tutti gli stream di output sul file siano stati chiusi correttamente, il problema va ricercato nella parte di lettura.
    Un unico appunto: usa System.getProperty("line.separator") per farti ritornare la corretta stringa da usare come separatore di riga... \n va bene per i sistemi Linux/Unix, non per Windows.


    Appurato che la scrittura va a buon fine, quello che c'è da controllare è la lettura e lo split.

    Più approfonditamente: fatti stampare a video la riga letta prima di splittarla.

    Eventualmente, posta il codice che effettua la lettura e lo split.


    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

  4. #4
    Ciao e grazie per la risposta,
    allora per il suggerimento di schumy2000 non ho usato i \n ma
    codice:
    try {
                buffWriter.newLine();
                buffWriter.flush();
            } catch (IOException e) {
                logger.info("\nErrore " + e);
            }
    Per quanto riguarda il file, lo creo così, lo scrivo richiamando i metodi in searchFile


    codice:
    outputFile = new File(pathFinale);
            outputFW = new FileWriter(outputFile);
            buffWriter = new BufferedWriter(outputFW);
            searchFile(dir, estensione);
            buffWriter.close();
    
            docXml = new DocumentoXML();
            docXml.creaDocumento(outputFile, pathXml);
    e vorrei leggerlo in questo modo, assegnando di volta in volta il valore di ogni singolo token ad un elemento presente nell'XML

    codice:
    try {
                in = new BufferedReader(new FileReader(outputFile));
            } catch (FileNotFoundException e) {
                logger.info("\n Il file non è stato trovato " + e);
            }
    
            try {
                while ((singolaRiga = in.readLine()) != null) {
                    elemento = new Elemento();
                    assegnaValori(singolaRiga, elemento);
                }
            } catch (IOException e) {
                logger.info("\n Errori nella lettura del file");
            }

    dove il metodo assegnaValori è il seguente:

    codice:
    public void assegnaValori(String riga, Elemento elemento) {
    
            String[] leggiRiga = riga.split(",");
            int numeroTokenRiga = leggiRiga.length;
    
           elemento.setNomePackage(leggiRiga[0]);
           elemento.setTipoInterfaccia(leggiRiga[1]);
           elemento.setNomeClasse(leggiRiga[2]);
            for (int i = 3; i < numeroTokenRiga; i += 2) {
                elemento.setModificatoreMetodo(leggiRiga[i]);
                elemento.setNomeMetodo(leggiRiga[i + 1]);
            }
            }
            documento.getListaElementi().add(elemento);
        }
    Adesso non so bene dove sbaglio, ma si preciso so che fino al 5 token legge tutto correttamente, dal sesto ricomincia con la numerazione a partire da zero, e come se le stringhe fossero sulla stessa riga ma facessero parte di una nuova riga, non so se mi sono spiegata.
    Grazie

  5. #5
    Ho una curiosita': ma perche' non usi la PrintWriter? E' fatta apposta per questo tipo di problemi e hai a disposizione la print, println() con tutti i relativi vantaggi in termini di semplicita'...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io non ho capito bene il reale problema.
    Come dice LeleFT l'IO in generale non c'entra niente con il mancato output desiderato, credo sia più un problema di impostazione della logica.
    Domanda numero 1: il primo output, quello del file txt, è come te lo aspetti o dici che è corretto solo perché lo crea?
    Domanda numero 2: file.txt corretto, allora sicuro che il parser iniziale, così come lo hai pensato, è scritto bene?
    Domanda numero 3: file.txt non corretto, controlla la scrittura l'algoritmo di scrittura.

    metti delle print a video di cosa parsi, io non so che altro dirti visto che non ho capito bene cosa succede
    RTFM Read That F*** Manual!!!

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.