0

ファイルを 2 つのファイルに分割し、それらをマージして戻そうとすると、そのファイルを開くことができません。「このドキュメントを開くときにエラーが発生しました。ファイルが破損しているため、修復できませんでした。」というエラーが表示されます。

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();        
    }
}
4

1 に答える 1

0

ストリームからデータを読み取る場合、readメソッドはバッファをデータで完全に満たすことができない場合があります。実際に読み取ったバイト数を返します。また、戻り値 -1 でファイルの終わりを通知します。戻り値を無視することはできません。

        bytesRead = bf1.read(buffer, 0,buffer.length);
        if (bytesRead < 0) {
            // handle end of file!
        }
        bf3.write(buffer, 0, bytesRead);
于 2013-06-02T17:37:34.043 に答える