Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102

    Leggere tutto un file in una volta

    Avendo un file di testo c'è un metodo che permetta di leggerlo completamente? Senza fare concat ad ogni readLine();

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Leggere tutto un file in una volta

    Originariamente inviato da Pegasys
    Avendo un file di testo c'è un metodo che permetta di leggerlo completamente? Senza fare concat ad ogni readLine();
    Se vuoi avere tutto il contenuto del file di testo dentro un unico String (ma poi ci devi spiegare a che ti serve .... ) puoi creare un StringBuffer/StringBuilder, poi leggere a blocchi di N char e appenderli nello StringBuffer/StringBuilder.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Quello che mi serve avere è tutto il contenuto del file di testo dentro un'unica stringa

    Se ad esempio il file è formato da
    Nel mezzo del cammin di nostra vita.
    mi ritrovai per una selva oscura.
    ché la diritta via era smarrita.
    la stringa conterrà
    Nel mezzo del cammin di nostra vita.\nmi ritrovai per una selva oscura.\nché la diritta via era smarrita.
    StringBuffer la conosco ma rimane sempre come leggere tutto il file

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Pegasys
    ma rimane sempre come leggere tutto il file
    Crei un FileInputStream e poi con questo crei un FileInputStream. Quest'ultimo ha il metodo read() per leggere un blocco di N char che deposita in un array. La dimensione dell'array la puoi stabilire tu (es. 1024). Fai un ciclo in cui leggi un blocco che poi appendi al StringBuffer/StringBuilder.
    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
    Sep 2007
    Messaggi
    102
    Così va bene?

    codice:
    StringBuffer sb = new StringBuffer();
    FileInputStream fis = new FileInputStream("C:\\prova.txt");
    byte[] bArray = new byte[1024];
    int lettura = fis.read(bArray)
    while (lettura != null)
    {
    sb.append(lettura.toString());
    lettura = fis.read(bArray);
    }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Pegasys
    Così va bene?
    No affatto. Non devi usare solo FileInputStream, perché è "orientato" ai byte. Ma devi usare un Reader, come InputStreamReader che è orientato ai caratteri.
    Poi 'lettura' è un int, non puoi confrontarlo con null. Poi non devi appendere 'lettura' ma l'array. E nota, non tutto per intero ma usando l'append() che prende l'array più un offset (sempre 0 in questo caso) e una lunghezza. Perché l'ultimo blocco del file potrebbe essere più corto del tuo buffer.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Allora non so come fare. Se hai voglia di scrivere giù 2 righe per vedere come si fa ti ringrazio

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Pegasys
    Allora non so come fare.
    I passi sono pochi e semplici:

    1) Creare un StringBuffer o StringBuilder.
    2) Creare un FileInputStream e poi farne il "wrapping" in un InputStreamReader.
    3) Creare un array di char (di lunghezza adeguata ma non esagerata) e definire una variabile intera per la lunghezza che ritorna la read().
    4) In un loop:
    -- leggere un blocco di char con il metodo read() che ritorna la lunghezza.
    -- appendere al buffer il blocco di char, usando l'append() a cui passare anche offset (0) e la lunghezza.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Così potrebbe andare bene?

    InputStreamReader prova = new InputStreamReader(new FileInputStream("prova.txt"));
    char[] array = new char[1024];
    int offset = 0;
    StringBuffer buffer = new StringBuffer();

    int lettura = prova.read(array, offset, offset+array.length);

    while (lettura > 0)
    {
    buffer.append(array.toString());
    offset += array.length;
    lettura = prova.read(array, offset, offset+array.length);
    }

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    codice:
    public static String readWholeFile (String fileName)
        throws IOException
    {
        InputStreamReader isr = null;
    
        StringBuffer sb = new StringBuffer ();
        char[] buf = new char[1024];
        int len;
    
        try
        {
            FileInputStream fis = new FileInputStream (fileName);
            isr = new InputStreamReader (fis);
    
            while ((len = isr.read (buf)) > 0)
                sb.append (buf, 0, len);
    
            return sb.toString ();
        }
        finally
        {
            if (isr != null)
                isr.close ();
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.