importer java.io.BufferedReader ;
importer java.io.BufferedWriter ;
importer java.io.FileNotFoundException ;
importer java.io.FileReader ;
importer java.io.FileWriter ;
importer java.io.IOException ;
importer java.util.Collections ;
importer java.util.Iterator ;
importer java.util.LinkedList ;
importer java.util.Random ;
classe publique LargeMappedFiles {
/**
* Tri et fusion de Big Data
*
* @param arguments
*/
public static void main (String[] args) lance IOException {
//Chemin pour écrire le fichier
Chaîne filePath = "D://456" ;
// Chemin vers le fichier divisé
Chaîne sqlitFilePath = "D://456//123" ;
//Nombre de données
int NombreNombres=1 0000000 ;
//Le nombre de sous-fichiers
int NombreFichier=10 ;
//Précision
int countAccuracy=30*CountFile;
long startNumber=System.currentTimeMillis();
//Écrire un fichier Big Data
WriteData(filePath,CountNumbers);
System.out.println("Stockage terminé");
// Divise le fichier Big Data en dix autres petits fichiers
sqlitFileDate(filePath, sqlitFilePath,CountFile);
System.out.println("Découpe du fichier terminée !");
// Trie les données de chaque fichier
singleFileDataSort(sqlitFilePath,CountFile);
System.out.println("Chaque sous-fichier est trié !");
//Ajustement de la précision, comparaison et intégration de dix données de fichiers
deathDataFile(filePath,sqlitFilePath,countAccuracy,CountFile);
System.out.println("Intégration terminée");
long stopNumber=System.currentTimeMillis();
System.out.println("Prend du temps"+(stopNumber-startNumber)/1000+"milliseconds");
}
//Écrire un fichier Big Data
public static void WriteData (String path, int CountNumbers) lance IOException {
chemin = chemin + "//12114.txt" ;
FileWriter fs = new FileWriter(chemin);
BufferedWriter fw=nouveau BufferedWriter(fs);
pour (int i = 0; i < CountNumbers; i++) {
fw.write(new Random().nextInt(Integer.MAX_VALUE) + "/r/n");
}
fw.close();
fs.close();
}
// Divise le fichier Big Data en dix autres petits fichiers
public static void sqlitFileDate (String filepath, String sqlitPath,
int CountFile) lance IOException {
FileWriter fs = nul ;
BufferedWriter fw=null ;
FileReader fr = new FileReader(chemin du fichier + "//12114.txt");
BufferedReader br = new BufferedReader(fr); // Lire et récupérer la ligne entière de données
int je = 1;
LinkedList WriterLists=new LinkedList(); //Initialiser la collection d'objets du flux de fichiers
LinkedList fwLists=new LinkedList();
pour (int j = 1; j <= CountFile; j++) {
//Déclare l'objet
fs = new FileWriter(sqlitPath + "//12" + j + ".txt",false);
fw=nouveau BufferedWriter(fs);
//Charge l'objet dans la collection
WriterLists.add(fs);
fwLists.add(fw);
}
// Détermine s'il y a encore des données à renvoyer dans le flux de fichiers
tandis que (br.ready()) {
int count=1;//Initialiser le premier flux de fichier
for (Itérateur itérateur = fwLists.iterator(); iterator.hasNext();) {
Type BufferedWriter = (BufferedWriter) iterator.next();
if(i==count)//Déterminer dans quel flux de fichiers c'est au tour d'écrire les données
{
// Écrivez les données, sautez, passez au flux de fichier suivant et écrivez les données suivantes
type.write(br.readLine() + "/r/n");
casser;
}
compte++;
}
// Détermine si le dernier flux de fichiers a été atteint
si (i >= CountFile) {
je = 1 ;
} autre
je++;
}
br.close();
fr.close();
for (Itérateur itérateur = fwLists.iterator(); iterator.hasNext();) {
Objet BufferedWriter = (BufferedWriter) iterator.next();
objet.close();
}
//Parcourir et fermer tous les flux de sous-fichiers
pour (Itérateur itérateur = WriterLists.iterator(); iterator.hasNext();) {
Objet FileWriter = (FileWriter) iterator.next();
objet.close();
}
}
// Trie les données de chaque fichier
public static void singleFileDataSort (String path1, int CountFile) lance IOException {
Numéros de LinkedList = null ;
pour (int i = 1; i <= CountFile; i++) {
nums = new LinkedList();
Chemin de chaîne = chemin1 + "//12" + i + ".txt" ;
essayer {
FileReader fr = new FileReader(chemin);
BufferedReader br = new BufferedReader(fr);
tandis que (br.ready()) {
// Ajoute les données uniques lues à la collection
nums.add(Integer.parseInt(br.readLine()));
}
// Trie la collection
Collections.sort(numéros);
//Écrit les données triées dans le fichier source
numberSort(numéros, chemin);
br.close();
fr.close();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// Trie les données de chaque fichier puis les écrit dans le fichier source
public static void numberSort (liste LinkedList, chemin de chaîne) {
essayer {
FileWriter fs = new FileWriter(chemin);
BufferedWriter fw=nouveau BufferedWriter(fs);
for (Itérateur iterator = list.iterator(); iterator.hasNext();) {
Objet objet = (Objet) iterator.next();
fw.write(objet + "/r/n");
}
fw.close();
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//Intégration finale des données du fichier (ajustement de la précision)
public static void deathDataFile (String filepath, String sqlitFilePath1,
int countAccuracy, int CountFile) lance IOException {
LinkedList nums = new LinkedList(); //Ajouter des données et trier
Object temp = null; // Enregistre le dernier numéro restant dans chaque tri
booléen ispass = faux ;
LinkedList ispasses = null; //Enregistre les informations d'état du fichier de données
FileWriter fs = new FileWriter(filepath + "//Sort.txt", false); //Créer un flux de fichiers pour l'écriture de données intégrée
BufferedWriter bw=nouveau BufferedWriter(fs);
FileReader fr = null; //Déclare le flux du fichier de lecture
BufferedReader br = null; //Déclarer BufferedReader
LinkedList WriterLists = new LinkedList(); // Initialise la collection d'objets du flux de fichiers
LinkedList WriterListFile = new LinkedList();
pour (int j = 1; j <= CountFile; j++) {
// Déclarez l'objet et ouvrez tous les flux de sous-fichiers pour accéder aux données de tous les sous-fichiers
fr = new FileReader(sqlitFilePath1 + "//12" + j + ".txt");
//Ouvrez tous les BufferedReaders pour faciliter la lecture de la ligne entière la prochaine fois
br = new BufferedReader(fr);
//Charge tous les objets FileReader dans la collection
WriterListFile.add(fr);
//Charge tous les objets BufferedReader dans la collection
WriterLists.add(br);
}
pour (;;) {
// Stocke l'état des données des dix fichiers sources dans une collection pour faciliter le jugement ultérieur.
ispasses = new LinkedList();
// Lire les données individuelles de dix fichiers sources respectivement
pour (Itérateur itérateur = WriterLists.iterator(); iterator.hasNext();) {
Objet BufferedReader = (BufferedReader) iterator.next();
Objet obj = nul ;
while (objet.ready()) {
//Ajouter des données pour chaque flux de fichiers
nums.add(Integer.parseInt(object.readLine().toString()));
casser;
}
si (object.ready() == false)
ispasses.add("true"); //Enregistre l'état des données dans chaque fichier dans la collection
}
// Détermine si c'est la première fois que tu entres
if (nums.size() % countAccuracy == 0 && ispass == false) {
// Trie la collection
Collections.sort(numéros);
//Recevez les données les plus volumineuses et écrivez d'autres données dans le fichier de tri total
temp = numberSortData (nums, chemin de fichier, false, countAccuracy, bw);
//Réinitialise la collection
nums = new LinkedList();
//Ajoute les données restantes de l'ensemble de comparaisons précédent
nums.add(temp);
ispass = vrai ;
//Enregistrez la quantité de données du fichier source pour le prochain parcours
continuer;
}
si (passe) {
if (nums.size() % countAccuracy == 1 && nums.size() > 1) {
// Trie la collection
Collections.sort(numéros);
//Recevez les données les plus volumineuses et écrivez d'autres données dans le fichier de tri total
temp = numberSortData (nums, chemin de fichier, true, countAccuracy,
pc);
nums = new LinkedList();
nums.add(temp);
continuer;
}
}
//Enregistre l'emplacement du prochain ensemble de données
// Détermine si les dix fichiers ne contiennent aucune donnée
if (ispasses.size() == CountFile) {
Collections.sort(numéros);
temp = numberSortData (nums, filepath, true, countAccuracy, bw);
nums = new LinkedList();
casser;
}
}
bw.close();
//Ferme le flux d'écriture
fs.close();
//Ferme tous les BufferedReaders
pour (Itérateur itérateur = WriterLists.iterator(); iterator.hasNext();) {
BufferedReader object2 = (BufferedReader) iterator.next();
objet2.close();
}
//Ferme tous les FileReaders
pour (Itérateur itérateur = WriterListFile.iterator(); iterator.hasNext();) {
Objet FileReader = (FileReader) iterator.next();
objet.close();
}
}
// Trier les données et les écrire dans le fichier final (ajustement de précision)
numéro d'objet statique publicSortData (liste LinkedList, String filePath,
boolean ispass, int countAccuracy,BufferedWriter fs) {
Objet temp = 0; //Enregistre la dernière valeur
int tempCount = 0; //Enregistre l'emplacement des données écrites
essayer {
for (Itérateur iterator = list.iterator(); iterator.hasNext();) {
Objet objet = (Objet) iterator.next();
// Détermine si c'est le dernier numéro
if (tempCount == list.size() - 1) {
// Jugement qu'il y en a moins de 100 dans l'ensemble
if (list.size() < countAccuracy + 1 && ispass) {
température = nul ;
} autre {
temp = objet ;
casser;
}
}
//Écrire dans la source de données
fs.write(objet + "/r/n");
//L'indice des données enregistrées
tempCount++;
}
} catch (IOException e) {
e.printStackTrace();
}
température de retour ;
}
}