2015-04-23 2 views
0

Я создаю программу, которая нацелена на то, чтобы вносить 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

Любая идея о том, что проблема?

ответ

1
  1. В коде, вы определяете File newFile = new File(name + " " + i + ".txt"); и out = new FileOutputStream(newFile); в whilte цикле, это не правильно.
  2. while((temp = bis.read(b)) > 0); не точка с запятой здесь =»
  3. Многие ошибки в коде я изменить свой код, как:.

     File newFile = new File(name + " " + i + ".txt"); 
         newFile.createNewFile(); 
         out = new FileOutputStream(newFile); 
         out.write(b); // Writes to the file 
         out.flush(); 
         out.close(); 
    

Если вам нужен код запуска, как вы хотите, здесь вы являются

 for (int i = 1; i <= numberOfSplits; i++) { 
      String name = file.getName(); 
      byte[] b = parts[i - 1].getBytes(Charset.forName("UTF-8")); 
      ByteArrayInputStream bis = new ByteArrayInputStream(b); 

      int temp = 0; 
      File newFile = new File(name + " " + i + ".txt"); 
      newFile.createNewFile(); 
      FileOutputStream out = new FileOutputStream(newFile);      
      while ((temp = bis.read()) > 0) 
      { 
       out.write(temp); // Writes to the file 
      } 
      out.flush(); 
      out.close(); 
     } 
+0

Спасибо за редактирование. Но ничего себе ... Из того, что я пробовал, я даже не рассматривал эти две линии как самый большой виновник моей проблемы Лем. Ваша помощь была высоко оценена. – Midge

Смежные вопросы