2013-06-02 126 views
0

我已经将文件分成两个文件,然后如果我尝试将它们合并回来,我无法打开该文件。我的错误是“打开此文档时发生错误,文件已损坏,无法修复”。在java中合并文件

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 

public class combinefiles { 

    public static void main(String[] args) throws IOException { 

     File f1 = new File("C:\\Users\\Desktop\\copie1.pdf"); 
     InputStream if1 = new FileInputStream(f1); 
     BufferedInputStream bf1 = new BufferedInputStream(if1); 


     File f2 = new File("C:\\Users\\Desktop\\copie2.pdf"); 
     FileInputStream if2 = new FileInputStream(f2); 
     BufferedInputStream bf2 = new BufferedInputStream(if2); 

     File f3 = new File("C:\\Users\\Desktop\\merge.pdf"); 
     FileOutputStream of3 = new FileOutputStream(f3); 
     BufferedOutputStream bf3 = new BufferedOutputStream(of3); 


     int packetsize = 1024; 
     double nosofpackets=Math.ceil(((int) (new File("C:\\Users\\Desktop\\NAV_7.pdf")).length())/packetsize); 
     System.out.println(nosofpackets); 

     int bytesRead =0; 
     byte[] buffer = new byte[1024]; 

     for (int i = 0;i<100;i++){ 
      //while ((bytesRead = bf1.read(buffer)) != -1){ 

      bf1.read(buffer, 0,buffer.length); 
      //System.out.println("Packet:"+(i+1)); 
      bf3.write(buffer, 0, buffer.length); 
      bf3.flush(); 
     } 



     //while ((bytesRead = bf2.read(buffer)) != -1){ 
     for (int i = 101;i<nosofpackets+2;i++){ 
      bf2.read(buffer, 0,buffer.length); 
      System.out.println("Packet:"+(i+1)); 
      bf3.write(buffer,0, buffer.length); 
      bf3.flush(); 
     } 
     of3.close();   
    } 
} 
+0

我不认为你可以将两个PDF中的字节粘贴到一个文件中,并有一个合并文件。我怀疑它比这更复杂一点。 –

+0

你是如何分割文件的?与PDF工具或只是字节只是为了有一个更大的文件分解成更小的块?你是否期望部分文件'copie1.pdf'和'copie2.pdf'是有效的pdf文件? – A4L

+0

检查这个帖子:http://stackoverflow.com/questions/3585329/how-to-merge-two-pdf-files-into-one-in-java –

回答

0

当你阅读从流数据中,read方法可能不能完全填充数据的缓冲区。它返回它实际读取的字节数。它还以返回值-1表示文件的结尾。你不能忽略返回值。

 bytesRead = bf1.read(buffer, 0,buffer.length); 
     if (bytesRead < 0) { 
      // handle end of file! 
     } 
     bf3.write(buffer, 0, bytesRead);