Ребят, помогите, плз. Что-то совсем не получается разобраться. Видимо чего-то не дочитал в теории =(
package com.javarush.task.task18.task1825;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws IOException{
// String input = "Test.ext.part0589";
// String file = input.substring(0, input.lastIndexOf(".part"));
// System.out.println("file: " + file);
// String part = input.substring(input.lastIndexOf(".part")+5, input.length());
// System.out.println("part: " + part);
Map<String, FileParts> files = new HashMap<>();
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
String input, file, filePartIndex;
while (true){
input = console.readLine();
if (input.equals("end"))
break;
file = input.substring(0, input.lastIndexOf(".part"));
filePartIndex = input.substring(input.lastIndexOf(".part")+5, input.length());
if (!files.containsKey(file)){
files.put(file, new FileParts(file));
}else {
files.get(file).add(Integer.parseInt(filePartIndex), input);
}
}
for (Thread thread:
files.values()) {
thread.start();
}
}
public static class FileParts extends Thread{
private String fileName;
private Map<Integer, String> parts = new TreeMap<>();
public FileParts(String fileName) {
this.fileName = fileName;
}
public void add(int index, String filePart){
this.parts.put(index, filePart);
}
@Override
public void run(){
try {
FileOutputStream file = new FileOutputStream(this.fileName);
FileInputStream filePart;
byte[] buff;
for (String filePartName : this.parts.values()) {
filePart = new FileInputStream(filePartName);
buff = new byte[filePart.available()];
filePart.read(buff);
filePart.close();
file.write(buff);
}
file.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}