import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
java.util.Collections importieren;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Random;
öffentliche Klasse LargeMappedFiles {
/**
* Sortieren und Zusammenführen großer Datenmengen
*
* @param args
*/
public static void main(String[] args) löst eine IOException {
//Pfad zum Schreiben der Datei
String filePath = "D://456";
// Pfad zur geteilten Datei
String sqlitFilePath = "D://456//123";
//Anzahl der Daten
int CountNumbers=10000000;
//Die Anzahl der Unterdateien
int CountFile=10;
//Präzision
int countAccuracy=30*CountFile;
long startNumber=System.currentTimeMillis();
//Big-Data-Datei schreiben
WriteData(filePath,CountNumbers);
System.out.println("Speicherung abgeschlossen");
// Teilen Sie die große Datendatei in zehn weitere kleine Dateien auf
sqlitFileDate(filePath, sqlitFilePath,CountFile);
System.out.println("Dateischneiden abgeschlossen!");
// Sortieren Sie die Daten jeder Datei
singleFileDataSort(sqlitFilePath,CountFile);
System.out.println("Jede Unterdatei ist sortiert!");
//Genauigkeitsanpassung, Vergleich und Integration von zehn Dateidaten
DeathDataFile(filePath,sqlitFilePath,countAccuracy,CountFile);
System.out.println("Integration abgeschlossen");
long stopNumber=System.currentTimeMillis();
System.out.println("Zeitaufwändig"+(stopNumber-startNumber)/1000+"milliseconds");
}
//Big-Data-Datei schreiben
public static void WriteData(String path,int CountNumbers) löst eine IOException {
path = path + "//12114.txt";
FileWriter fs = new FileWriter(path);
BufferedWriter fw=new BufferedWriter(fs);
for (int i = 0; i < CountNumbers; i++) {
fw.write(new Random().nextInt(Integer.MAX_VALUE) + "/r/n");
}
fw.close();
fs.close();
}
// Teilen Sie die große Datendatei in zehn weitere kleine Dateien auf
public static void sqlitFileDate(String filepath, String sqlitPath,
int CountFile) wirft IOException {
FileWriter fs = null;
BufferedWriter fw=null;
FileReader fr = new FileReader(filepath + "//12114.txt");
BufferedReader br = new BufferedReader(fr); // Die gesamte Datenzeile lesen und abrufen
int i = 1;
LinkedList WriterLists=new LinkedList(); //Initialisieren Sie die Dateistream-Objektsammlung
LinkedList fwLists=new LinkedList();
for (int j = 1; j <= CountFile; j++) {
//Objekt deklarieren
fs = new FileWriter(sqlitPath + „//12“ + j + „.txt“,false);
fw=new BufferedWriter(fs);
//Laden Sie das Objekt in die Sammlung
WriterLists.add(fs);
fwLists.add(fw);
}
//Bestimmen Sie, ob im Dateistream noch Daten zur Rückgabe vorhanden sind
while (br.ready()) {
int count=1;//Initialisiere den ersten Dateistream
for (Iterator iterator = fwLists.iterator(); iterator.hasNext();) {
BufferedWriter type = (BufferedWriter) iterator.next();
if(i==count)//Bestimmen Sie, in welchen Dateistream die Daten geschrieben werden sollen
{
//Daten schreiben, herausspringen, mit dem nächsten Dateistream fortfahren und die nächsten Daten schreiben
type.write(br.readLine() + "/r/n");
brechen;
}
count++;
}
//Bestimmen Sie, ob der letzte Dateistream erreicht wurde
if (i >= CountFile) {
ich = 1;
} anders
i++;
}
br.close();
fr.close();
for (Iterator iterator = fwLists.iterator(); iterator.hasNext();) {
BufferedWriter object = (BufferedWriter) iterator.next();
object.close();
}
//Alle Subdatei-Streams durchlaufen und schließen
for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) {
FileWriter object = (FileWriter) iterator.next();
object.close();
}
}
// Sortieren Sie die Daten jeder Datei
public static void singleFileDataSort(String path1,int CountFile) throws IOException {
LinkedList nums = null;
for (int i = 1; i <= CountFile; i++) {
nums = new LinkedList();
String path = path1 + „//12“ + i + „.txt“;
versuchen {
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
// Die gelesenen Einzeldaten zur Sammlung hinzufügen
nums.add(Integer.parseInt(br.readLine()));
}
// Sortiere die Sammlung
Collections.sort(nums);
//Schreiben Sie die sortierten Daten in die Quelldatei
numberSort(nums, path);
br.close();
fr.close();
} Catch (NumberFormatException e) {
e.printStackTrace();
} Catch (FileNotFoundException e) {
e.printStackTrace();
} Catch (IOException e) {
e.printStackTrace();
}
}
}
// Alle Dateidaten sortieren und dann in die Quelldatei schreiben
public static void numberSort(LinkedList list, String path) {
versuchen {
FileWriter fs = new FileWriter(path);
BufferedWriter fw=new BufferedWriter(fs);
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Objekt object = (Object) iterator.next();
fw.write(object + "/r/n");
}
fw.close();
fs.close();
} Catch (IOException e) {
e.printStackTrace();
}
}
//Endgültige Integration der Dateidaten (Genauigkeitsanpassung)
public static void deadDataFile(String filepath, String sqlitFilePath1,
int countAccuracy, int CountFile) löst eine IOException {
LinkedList nums = new LinkedList(); //Daten hinzufügen und sortieren
Object temp = null; // Notieren Sie die letzte Zahl, die bei jeder Sortierung übrig bleibt
boolean ispass = false;
LinkedList ispasses = null; //Zeichnen Sie die Statusinformationen der Datendatei auf
FileWriter fs = new FileWriter(filepath + "//Sort.txt", false); //Erstelle einen Dateistream für integriertes Datenschreiben
BufferedWriter bw=new BufferedWriter(fs);
FileReader fr = null; //Deklarieren Sie den Lesedateistream
BufferedReader br = null; //BufferedReader deklarieren
LinkedList WriterLists = new LinkedList(); // Initialisieren Sie die Dateistream-Objektsammlung
LinkedList WriterListFile = new LinkedList();
for (int j = 1; j <= CountFile; j++) {
// Deklarieren Sie das Objekt und öffnen Sie alle Unterdatei-Streams, um auf die Daten aller Unterdateien zuzugreifen
fr = new FileReader(sqlitFilePath1 + „//12“ + j + „.txt“);
//Alle BufferedReader öffnen, um das nächste Mal das Lesen der gesamten Zeile zu erleichtern
br = new BufferedReader(fr);
//Alle FileReader-Objekte in die Sammlung laden
WriterListFile.add(fr);
//Alle BufferedReader-Objekte in die Sammlung laden
WriterLists.add(br);
}
für (;;) {
// Speichern Sie den Datenstatus der zehn Quelldateien in einer Sammlung, um die spätere Beurteilung zu erleichtern.
ispasses = new LinkedList();
// Einzelne Daten aus jeweils zehn Quelldateien lesen
for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) {
BufferedReader object = (BufferedReader) iterator.next();
Objekt obj = null;
while (object.ready()) {
//Daten für jeden Dateistream hinzufügen
nums.add(Integer.parseInt(object.readLine().toString()));
brechen;
}
if (object.ready() == false)
ispasses.add("true"); //Speichern Sie den Datenstatus in jeder Datei in der Sammlung
}
// Bestimmen Sie, ob es das erste Mal ist, dass Sie hereinkommen
if (nums.size() % countAccuracy == 0 && ispass == false) {
// Sortiere die Sammlung
Collections.sort(nums);
//Empfangen Sie die größten Daten und schreiben Sie andere Daten in die Gesamtsortierungsdatei
temp = numberSortData(nums, filepath, false, countAccuracy, bw);
//Die Sammlung neu initialisieren
nums = new LinkedList();
//Fügen Sie die verbleibenden Daten aus dem vorherigen Vergleichssatz hinzu
nums.add(temp);
ispass = true;
//Zeichnen Sie die Datenmenge der Quelldatei für die nächste Durchquerung auf
weitermachen;
}
if (ispass) {
if (nums.size() % countAccuracy == 1 && nums.size() > 1) {
// Sortiere die Sammlung
Collections.sort(nums);
//Empfangen Sie die größten Daten und schreiben Sie andere Daten in die Gesamtsortierungsdatei
temp = numberSortData(nums, filepath, true, countAccuracy,
bw);
nums = new LinkedList();
nums.add(temp);
weitermachen;
}
}
//Zeichnen Sie den Speicherort des nächsten Datensatzes auf
// Bestimmen Sie, ob alle zehn Dateien keine Daten enthalten
if (ispasses.size() == CountFile) {
Collections.sort(nums);
temp = numberSortData(nums, filepath, true, countAccuracy, bw);
nums = new LinkedList();
brechen;
}
}
bw.close();
//Schließe den Schreibstream
fs.close();
//Alle BufferedReader schließen
for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) {
BufferedReader object2 = (BufferedReader) iterator.next();
object2.close();
}
//Alle FileReader schließen
for (Iterator iterator = WriterListFile.iterator(); iterator.hasNext();) {
FileReader object = (FileReader) iterator.next();
object.close();
}
}
// Sortieren Sie die Daten und schreiben Sie sie in die endgültige Datei (Präzisionsanpassung)
öffentliches statisches Objekt numberSortData(LinkedList list, String filePath,
boolean ispass, int countAccuracy,BufferedWriter fs) {
Object temp = 0; //Letzten Wert aufzeichnen
int tempCount = 0; //Den Speicherort der geschriebenen Daten aufzeichnen
versuchen {
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Objekt object = (Object) iterator.next();
// Bestimmen Sie, ob es die letzte Zahl ist
if (tempCount == list.size() - 1) {
// Beurteilung, dass es weniger als 100 im Satz gibt
if (list.size() < countAccuracy + 1 && ispass) {
temp = null;
} anders {
temp = Objekt;
brechen;
}
}
//In Datenquelle schreiben
fs.write(object + "/r/n");
//Der Index der aufgezeichneten Daten
tempCount++;
}
} Catch (IOException e) {
e.printStackTrace();
}
Rücklauftemperatur;
}
}