3

次のコードを見てください

package normal;

import java.io.*;
import java.util.*;

public class ReGenerateFiles
{
    private File inputFolder, outputFolder;
    private String outputFormat, nameOfTheFile;

    private FileInputStream fis;
    private FileOutputStream fos;
    List <Byte> al;

    private byte[] buffer;

    private int blockNumber = 1;

    public ReGenerateFiles(File inputFile, File outputFile, String nameOfTheFile, String outputFormat)
    {
        this.inputFolder = inputFile;
        this.outputFolder = outputFile;
        this.nameOfTheFile = nameOfTheFile;
        this.outputFormat = outputFormat;
    }

    public void reGenerate() throws IOException
    {
        File file[] = inputFolder.listFiles();

        for(int i=0;i<file.length;i++)
        {
            System.out.println(file[i]);
        }

        for(int i=0;i<file.length;i++)
        {
            try
            {
                buffer = new byte[5000000];


                int read = fis.read(buffer, 0, buffer.length);
                fis.close();

                writeBlock();


            }
            catch(IOException io)
            {
                io.printStackTrace();
            }
            finally
            {
                fis.close();
                fos.close();
            }
        }
    }

    private void writeBlock()throws IOException
    {
        try
        {
            fos = new FileOutputStream(outputFolder+"/"+nameOfTheFile+"."+outputFormat,true);
                fos.write(buffer, 0, buffer.length);
                fos.flush();
                fos.close();
        }
        catch(Exception e)
        {
            fos.close();
            e.printStackTrace();
        }
        finally
        {
            fos.close();
        }
    }


}

ここでは、分割されたファイルを元のファイルに再構築しようとしています。これが私がそれを分割する方法です(選択された回答)

今、再アセンブルしようとすると、「kalimba.mp3 にアクセスできません。別のプログラムで使用されています」のようなエラーが表示されます。これは、93 個の分割ファイルを実行した後に発生します (さらに 200 個あります)。ストリームがfinallyブロック内で閉じられていることを確認したにもかかわらず、なぜそれが起こっているのですか?

別の質問ですが、バイト配列の値として 500000 を割り当てました。処理しようとしている特定のファイルの元のサイズに応じてバイト配列を設定できなかったため、これを行いました。バイト配列値を次のように割り当てました

buffer = new byte[(byte)file[i].length();

前ですが、うまくいきませんでした。

これら 2 つの問題を解決し、分割されたファイルを正しく再構築する方法を教えてください。

4

1 に答える 1

0

これは、バッファが実際のコンテンツのサイズに適合していないためです。常に 50000 で、実際のサイズは異なります。それが問題だ

于 2012-07-07T13:52:22.663 に答える