2017-03-28 8 views
1

코드 정보 : 기본적으로 주어진 거대한 텍스트 파일을 크기가 작은 10MB 크기의 'n'파일로 분할하는 프로그램을 작성하고 있습니다. 코드의내 파일 분할 프로그램 (Java)에서 올바른 해결책을 찾을 수없는 이유는 무엇입니까?

워크 플로우 :

  1. 파일에 줄 번호를 찾을 수, 소스 파일을 엽니 다.
  2. 한 줄의 대략적인 크기 (바이트)를 계산하고 10MB 파일 당 줄 수는 계산하지 않습니다.
  3. 파일을 만들고 생성하는 데 필요한 파일을 찾습니다.
  4. 그런 다음 소스 파일의 붙여 넣기를 분할 파일로 복사하십시오.

문제 : 프로그램이 올바르게 파일의 n 개의으로 분할하지만, 모든 파일이 동일한 데이터를 가지고있다. 이는 프로그램이 첫 번째 분할 파일을 완료 한 후 두 번째 파일에 대해 독자가 자동으로 원본 소스 파일의 첫 번째 줄로 돌아 가기 때문입니다. 따라서 모든 분할 파일에는 첫 번째 분할 파일과 동일한 데이터가 포함됩니다.

코드 :

package filespliter; 
import java.io.*; 
public class FileSpliter { 
    public int filecount(FileReader f) throws IOException 
    { 
     BufferedReader buf=new BufferedReader(f); 
     int count=0; 
     while(buf.readLine()!=null) 
     { 
     count++; 
     } 
     buf.close(); 
    return count; 
    } 

    public int split_value_generator(File f, int count) 
    { 
     double b=(f.length()); 
     System.out.println((b/1024)+"kb"); 
     double i=(b/count); 
     System.out.println(" No. of bytes per line :"+i); 
     int splitfactor = ((int)(((1024*1024)*10)/i)); 
     System.out.println(splitfactor+" lines per file"); 
     return splitfactor; 
    } 

    public static void filecreate(int index) 
    { 
     String no; 
     int i=1; 
     while(index!=0) //index will be number of files I need to create 
     {    
     no=Integer.toString(i); 
     String key = ("Split"+no); 
     key=("e:\\wipro\\splits\\Split"+no+".txt"); 
     File file= new File(key); 
     index--; 
     i++; 
     } 
     i=1; 
    } 

    public static void filewrite(int nof,int nol_pf) throws IOException 
    { //nof - no. of files || nol_pf - no. of lines per file 
     BufferedWriter bwrite; 
     String key;  
     int index=1; 
     while(index<=nof) 
     { 

      key="e:\\wipro\\splits\\Split"+index+".txt"; 
      System.out.println(key); 
      bwrite=new BufferedWriter(new FileWriter(key)); 
      writelines(bwrite,nol_pf); 
      index++; 
      iteration+=nolpf2; 
     } 
      //bwrite.flush(); 
      // bwrite.close(); 
      System.out.println("Finished !"); 
    } 

    public static void writelines(BufferedWriter b, int nol_pf)throws IOException 
    { 
      String temp; 
      BufferedReader scan=new BufferedReader(new FileReader("E://wipro//CBDL.txt")); 
      while(nol_pf!=0) 
       { 
        temp=scan.readLine(); 
        b.write(temp); 
        b.newLine(); 
        nol_pf--; 

       }   
     } 


    public static void main(String[] args) throws FileNotFoundException, IOException { 
     String path="E://wipro//CBDL.txt"; 
     File source=new File(path); 
     FileReader file=new FileReader(source); 
     FileSpliter obj=new FileSpliter(); 
     int count=obj.filecount(file); 
     int no_of_lines_per_file = obj.split_value_generator(source, count); 
     int no_of_files=count/no_of_lines_per_file; 
     System.out.println("Need to create "+no_of_files+" files "); 
     filecreate(no_of_files); 
     file.close(); 
     filewrite(no_of_files,no_of_lines_per_file); 


    } 

} 

출력 : 논리가 작동, n은 작은 파일의 번호가 생성되지만, 모든 분할 파일이 첫 번째 분할 파일의 데이터가 포함되어 있습니다.

지금까지 읽어 주셔서 감사합니다. 나는 어떤 사람이 나에게 해결책을 줄 수 있기를 바란다. writelines 방법이

BufferedReader scan=new BufferedReader(new FileReader("E://wipro//CBDL.txt")); 

개시보다는

답변

0

,

main에서 시작하고 filewrite에 파라미터 writelines

로 전달