Scrivere in un file di caretteri

di Walter995 il
10 risposte
Salve a tutti .
Devo creare un metodo che dato il nome del file e un intero n scrive in un file di caratteri con quel nome, n interi casuali , uno per riga.
Questo è il mio codice ma non funziona dato che il file di testo rimane sistematicamente vuoto...Potreste aiutarmi cortesemente?

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package esercizio3;
import java.io.*;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Random;
import java.util.Scanner;

public class Esempio {

  
        
     public static void scriviIntero(String nomeFile, int n, int m) {
        try (PrintWriter scrivi = new PrintWriter(new FileWriter(nomeFile), true)) {
            for (int i = 0; i < n; i++) {
                int nuovo =(int) Math.random() ;
                scrivi.println(nuovo);
            }
        } catch (IOException e) {
            System.out.println("Errore di I/O nella funzione scriviIntero nel tentativo di scrivere sul file " + nomeFile);
        }
    }

    
    
    
    public static void main(String[] args) {
   
        scriviIntero("C:\\Users\\Walter\\Desktop\\dati.txt",50,100);
    }
    
}



10 Risposte

  • Walter995 ha scritto:


    Questo è il mio codice ma non funziona dato che il file di testo rimane sistematicamente vuoto...Potreste aiutarmi cortesemente?
    Il file non resta "vuoto", gli n dati ci sono ma ... sono tutti 0. Perché hai fatto direttamente il cast a int del valore del random(), quello è il problema.
    random() dà un valore tra 0 (incluso) e 1 (escluso), in pratica è sempre 0,xxxxx e il cast a int tronca i decimali, risultato sempre 0.


    P.S. Non hai usato il parametro m
  • Ho ascoltato i tuoi suggerimenti ed ho cambiato il codice ma ancora non funziona come dovrebbe ...Dov'è l'errore?
    
    package esempio;
    import java.io.*;
    import java.util.InputMismatchException;
    import java.util.NoSuchElementException;
    import java.util.Random;
    import java.util.Scanner;
    
    
    public class Esempio {
    
      
            
         public static void scriviIntero(String nomeFile, int n) {
            try (PrintWriter scrivi = new PrintWriter(new FileWriter(nomeFile), true)) {
            Random random = new Random();
                for (int i = 0; i < n; i++) {
                    int nuovo = random.nextInt();
                    scrivi.println(nuovo);
                }
            } catch (IOException e) {
                System.out.println("Errore di I/O nella funzione scriviIntero nel tentativo di scrivere sul file " + nomeFile);
            }
        }
    
        
        
        
        public static void main(String[] args) {
       
            scriviIntero("C:\\Users\\Walter\\Desktop\\dati.txt",50);
        }
    }
        
    
  • Walter995 ha scritto:


    ho cambiato il codice ma ancora non funziona come dovrebbe ...Dov'è l'errore?
    Nessun errore, il codice ora "funziona" nel senso che hai 50 int casuali su tutto il range del int.
  • Sì avrei 50 interi , uno per ogni riga , di valore casuale . Continuo a non capire però perchè il file che gli passo rimane vuoto...
  • Walter995 ha scritto:


    Continuo a non capire però perchè il file che gli passo rimane vuoto...
    Come stai compilando/avviando? javac/java? (quale JDK?) Un IDE?
    E in che modo "apri" il txt per vederne il contenuto?
  • Apache NetBeans IDE 11.0
    Java: 12.0.2;
    Per aprire il txt faccio semplicemente un doppio click..
  • Walter995 ha scritto:


    Apache NetBeans IDE 11.0
    Java: 12.0.2;
    Per aprire il txt faccio semplicemente un doppio click..
    Ok ma nulla di strano comunque.
    Il file l'hai fatto scrivere sul "desktop". Bene, verifica la dimensione dalle proprietà, con 50 interi casuali il file dovrebbe essere intorno ai 600 byte ... quindi non "vuoto".
  • Ho controllato la dimensione ma dice 0 byte. Com'è possibile?
  • Hai chiuso lo stream?
  • Walter995 ha scritto:


    Ho controllato la dimensione ma dice 0 byte. Com'è possibile?
    Altamente strano ...... prova a compilare/avviare da prompt comandi (non da IDE).

    Weierstrass ha scritto:


    Hai chiuso lo stream?
    Ha usato il try-with-resource (Java 7+) quindi la risorsa PrintWriter viene di certo chiusa (e comunque c'è l'auto-flush attivato).
Devi accedere o registrarti per scrivere nel forum
10 risposte