Я создаю программу, которая нацелена на то, чтобы вносить n количество разделов и разбиение файла на это количество подфайлов. В моем SplitFile.java, я читаю файл, передавая массив подстрок, которые показывают текст, который должен идти в каждом файле split. Затем я преобразовываю строку в массив байтов и записываю массив байтов в разделенный файл, но каждый создаваемый файл выводит что-то только немного отличается.Байт-массив не корректно печатается в файл
SplitFile.java
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
public class SplitFile
{
int numberOfSplits = 1;
File file;
String[] parts = new String[5];
public SplitFile(File file,int numberOfSplits)
{
this.file = file;
this.numberOfSplits = numberOfSplits;
}
public void FileSplitter() throws IOException
{
FileInputStream fis = new FileInputStream(file);
String fileText = readFile();
if(numberOfSplits == 2)
{
int mid = fileText.length()/2;
parts[0] = fileText.substring(0, mid);
parts[1] = fileText.substring(mid);
}
else if(numberOfSplits == 3)
{
int third = fileText.length()/3;
int secondThird = third + third;
parts[0] = fileText.substring(0, third);
parts[1] = fileText.substring(third, secondThird);
parts[2] = fileText.substring(secondThird);
}
for(int i = 1; i <= numberOfSplits; i++)
{
BufferedInputStream bis = new BufferedInputStream(new fileInputStream(file));
FileOutputStream out;
String name = file.getName();
byte[] b = parts[i - 1].getBytes(Charset.forName("UTF-8"));
int temp = 0;
while((temp = bis.read(b)) > 0);
{
File newFile = new File(name + " " + i + ".txt");
newFile.createNewFile();
out = new FileOutputStream(newFile);
out.write(b, 0, temp); // Writes to the file
out.close();
temp = 0;
}
}
}
public String readFile() throws IOException
{
BufferedReader br = new BufferedReader(new FileReader(file));
try
{
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null)
{
sb.append(line);
sb.append("\n");
line = br.readLine();
}
return sb.toString();
}
finally
{
br.close();
}
}
}
Если я прохожу в 2 как количество расколов я хочу, не разделив ее прямо в середине, с 1 файлом является первой половиной и файл 2 существует второй половине, и вместо этого давая конец текстового файла для обоих файлов. Моя проблема, кажется, здесь:
while((temp = bis.read(b)) > 0);
{
File newFile = new File(name + " " + i + ".txt");
newFile.createNewFile();
out = new FileOutputStream(newFile);
out.write(b, 0, temp); // Writes to the file
out.close();
temp = 0;
}
Пример файла Я буду использовать здесь этот файл:
Myfile.txt
АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ
It разделяется на два файла, которые идут следующим образом:
Myfile.txt 1
nopqrstuvqxyz
Myfile.txt 2
opqrstuvqxyz
Любая идея о том, что проблема?
Спасибо за редактирование. Но ничего себе ... Из того, что я пробовал, я даже не рассматривал эти две линии как самый большой виновник моей проблемы Лем. Ваша помощь была высоко оценена. – Midge