Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    86

    [JAVA]IO_leggere_da_un_file

    Ciao a tutti!

    Devo scrivere un programma che legge un file di testo, specificato dal primo argomento della riga di comando, in una List.
    Il programma dovrebbe poi stamare righe casuali dal file, il numero di righe stampate specificato dal secondo argomento della riga di comando.
    Es:

    int lineNumber = Integer.parseInt(args[1]);

    Il file, ad esempio randomLines.txt(provate con un file qualsiasi)
    viene letto in questo modo:

    File f = new File(args[0]);
    FileInputStream in = new FileInputStream(f);

    Ho pensato di utilizzare una collection di dimensione prestabilita, invece di essere gradualmente riempita alla lettura del file.

    Es:

    Vector collection = new Vector();
    collection.setSize(lineNumber);


    Ho provato a scrivere l'algoritmo in questo modo: per determinare il numero di righe del file, ho pensato di utilizzare il metodo java.io.File.length per ottenere la dimensione del file, dividendo per una dimensione prestabilita della riga.

    Es:

    long lineSize = 150;

    Grazie

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

    Re: [JAVA]IO_leggere_da_un_file

    Originariamente inviato da valeof
    Ho provato a scrivere l'algoritmo in questo modo: per determinare il numero di righe del file, ho pensato di utilizzare il metodo java.io.File.length per ottenere la dimensione del file, dividendo per una dimensione prestabilita della riga.
    Non è granché ...

    Per tenere le righe in memoria, usa una collezione come ArrayList (o Vector se proprio vuoi, anche se è la "vecchia" collection).

    Per leggere il file "a righe", in genere conviene concatenare 3 classi di I/O: FileInputStream poi InputStreamReader poi BufferedReader. Quest'ultimo ha il metodo readLine() per leggere una riga per volta.

    Ogni riga letta la aggiungi semplicemente nella collezione.
    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
    Oct 2007
    Messaggi
    86
    Non mi è chiaro come devo fare ad ottenere righe casuali dal file:

    ho capito come "riempire" la Collection,
    ma quali righe mettere dentro la Collection(o dentro la List)?

    Ho a disposizione questi metodi:

    public static void shuffle(List list, Random rnd) {
    for (int i = list.size(); i > 1; i--)
    swap(list, i - 1, rnd.nextInt(i));
    }

    public static void swap(List list, int i, int j) {
    Object tmp = list.get(i);
    list.set(i, list.get(j));
    list.set(j, tmp);
    }

    ma non capisco come applicarli a questo esempio..

    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da valeof
    Non mi è chiaro come devo fare ad ottenere righe casuali dal file:

    ho capito come "riempire" la Collection,
    ma quali righe mettere dentro la Collection(o dentro la List)?
    Qui il problema, come al solito, è sempre solo uno: capire cosa ti è stato chiesto di fare esattamente. Da quello che hai detto, deduco che: a) Devi leggere tutte le righe del file e metterle in una collection e b) Da questa collection devi estrarre casualmente N righe (dove N è passato come argomento).

    In quest'ottica, i metodi shuffle/swap non ti servono affatto. Se la collection ha 100 righe, tu inizialmente dovrai estrarre un numero compreso tra 0 e 99 per prendere la prima riga casuale. Il passo successivo è quello di eliminare la riga dalla collection (così non c'è pericolo di riestrarla). A quel punto estrarrai un numero compreso tra 0 e 98, e così via....

    Questa è solo una mia ipotesi, non so se ti è stato chiesto di estrarre righe "uniche" o invece che possano ripetersi.
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.