2017-03-29 1 views
0

J'ai écrit un programme court pour un de mes cours et il y a quelque chose que je ne peux pas comprendre. Je suis donc supposé écrire 100 entiers aléatoires sur un fichier, relire les données et imprimer les entiers dans l'ordre croissant. Tout fonctionne bien, mais je ne vois pas ma liste triée finale sur le fichier de sortie, tout le monde peut voir pourquoi?Entrée/Sortie sur un fichier

Voici mon code:

private final static int NUMBEROFRANDOM = 100; 

public static void main(String[] args) throws IOException { 

    // Creating my file 
    java.io.File file = new java.io.File("Question1.txt"); 

    // If it already exists, print a message and terminate program 
    if (file.exists()) { 
     System.out.println("File already exists."); 
     System.exit(0); 
    } 

    // Creating my PrintWriter object 
    PrintWriter output = new PrintWriter(file); 

    // Creating 100 random numbers between 0 and 100 and printing them on the file 
    for (int i = 0; i < NUMBEROFRANDOM; i++) { 
     int number = (int) (Math.random() * 101); 
     output.print(number + " "); 
    } 

    // Creating my Scanner object 
    Scanner input = new Scanner(file); 

    // Creating my array list to store the sorted list of 100 elements 
    ArrayList<Integer> sortedList = new ArrayList<Integer>(); 

    // Reading the elements from the file and adding them into my array list 
    while (input.hasNext()) { 
     sortedList.add(input.nextInt()); 
    } 

    //Sorting elements from array list 
    Collections.sort(sortedList); 

    // Printing the elements in increasing order 
    for (int i = 0; i < sortedList.size(); i++) { 
     //System.out.println(sortedList.get(i)); 
     output.print(sortedList.get(i)); 
    } 

    // Closing my objects 
    input.close(); 
    output.close(); 

} 

Merci beaucoup, toute aide est très appréciée!

+1

Vous devez fermer la sortie après avoir créé les nombres. – notyou

+0

Je vois quelqu'un me battre - ma machine a passé trop de temps à ouvrir mon IDE :) – notyou

Répondre

0

Vous devez fermer le flux de sortie pour l'écrire dans le fichier. Vous le faites correctement la deuxième fois mais pas la première fois.

Ajouter:

output.close(); 

Après:

// Creating 100 random numbers between 0 and 100 and printing them on the file 
for (int i = 0; i < NUMBEROFRANDOM; i++) { 
    int number = (int) (Math.random() * 101); 
    output.print(number + " "); 
} 
//Here close the first output stream to get the data to the file. 
output.close(); 
1

Votre dossier est vide lorsque vous lisez à l'aide Scanner input = new Scanner(file);

Utilisez output.flush() pour enregistrer vos données après l'impression des valeurs.

output.close() - ferme votre flux et vous ne serez pas en mesure de stocker vos valeurs triées.

// Creating 100 random numbers between 0 and 100 and printing them on the file 
for (int i = 0; i < NUMBEROFRANDOM; i++) { 
    int number = (int) (Math.random() * 101); 
    output.print(number + " "); 
} 

output.flush(); 
0

Avant ci-dessous ligne de code, vous devez close ou flush d'écrire votre contenu dans votre fichier.

output.close(); <--- you need to close here 
Scanner input = new Scanner(file); 

Depuis, jusqu'à la ligne de code, il n'y avait rien écrit dans le fichier. Donc, sous le code devient inutile

while (input.hasNext()) { // nothing to read 
     sortedList.add(input.nextInt()); //nothing added to List 
    } 

    //Sorting elements from array list 
    Collections.sort(sortedList); //nothing to sort 

    // Printing the elements in increasing order 
    for (int i = 0; i < sortedList.size(); i++) { 

     output.print(sortedList.get(i)); // won't execute this line 
    }