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

之前,但它没有工作。

请帮助我解决这两个问题并正确地重新组装拆分的文件。

4

1 回答 1

0

那是因为缓冲区永远不会适合实际内容的大小。它始终是 50000,实际大小会有所不同。这就是问题

于 2012-07-07T13:52:22.663 回答