La lecture d'un .dat fichier dans un tableau en Java
Le code que j'ai écris a deux classes: writeInts et readInts. J'ai écrit writeInts à générer de façon aléatoire de 100 nombres entre 0 et 1000 et de sortie à un ensemble de données.dat fichier.
readInts est censé ouvrir un DataInputStream objet et lire les données "brutes" à partir des données.dat fichier et stocker les 100 entiers dans un tableau. Mon problème est que je n'arrive pas à lire correctement les données. Toute aide à ce serait grandement apprécié. Merci!
writeInts:
import java.io.*;
public class WriteInts {
public static void main(String[] args) throws IOException {
DataOutputStream output = new DataOutputStream(new FileOutputStream("data.dat"));
int num = 0 + (int)(Math.random());
int[] counts = new int[100];
for(int i=0; i<100; i++) {
output.writeInt(num);
counts[i] += num;
System.out.println(num);
}
output.close();
}
}
readInts:
import java.io.*;
import java.util.*;
public class ReadInts {
public static void main(String[] args) throws IOException {
//call the file to read
Scanner scanner = new Scanner(new File("data.dat"));
int[] data = new int[100];
int i = 0;
while (scanner.hasNextInt()) {
data[i++] = scanner.nextInt();
System.out.println(data[i]);
scanner.close();
}
}
}
My problem is that I can't seem to read the data correctly
Ce qui se passe?- Vous navez pas fournir ReadInt classe qui est problématique. Comment nous sommes censés pour vous aider ?
- writeInt() enregistre 4 octets dans le fichier de sortie. Lisez-vous en ASCII ou binaire?
- Désolé, ajouté. Je suis en train de lire en binaire.
- Vous semblez être écrit même numéro..
num
n'est jamais mis à jour - Comment est-il jamais mis à jour?
- int [] compte n'a pas de but dans cet exemple
Vous devez vous connecter pour publier un commentaire.
Si vous voulez écrire données binaires, utilisez DataInputStream/DataOutputStream. Scanner est pour données de texte et vous ne pouvez pas mélanger.
WriteInts:
ReadInts:
Plus. Si vous souhaitez générer un nombre aléatoire dans une plage de 0 à 1000 (tous deux inclus), vous pouvez utiliser cette instruction:
Il fonctionne de cette manière: Mathématiques.random() génère un double dans la gamme de 0 à 1 (exclusif), qui vous doit correspondre à l'intervalle entier et le plancher. Si vous voulez vous valeur maximale à 1000, vous multipliez par 1001 - 1001 elle-même est exclue.
Yep, comme ça:
Je vous recommande de renoncer
DataInputStream
etDataOutputStream
.Écrire les entiers un à une ligne à l'aide de
FileWriter
et de les lire à l'aide d'unBufferedReader
, un par ligne. C'est un problème facile.