Java简单备份和还原类

时间:2017-03-03 05:07:25

标签: java backup restore

我正在使用Java中的简单备份和恢复课程开展学校项目。它有两种方法,一种用于备份,另一种用于还原,将文件分解为由程序确定的大小的块,并使用还原从这些块重建文件。

具体来说,我被困在备份部分:

我想将文件拆分为与partSize大小相等的小块,并创建名为filename.1, filename.2, etc的输出文件。然后返回一个带有创建的计数文件的整数。

这是我的代码:

    public static int backup(String filename, double partSize) throws Exception {
    BufferedInputStream input = new BufferedInputStream(new FileInputStream(filename));
    int splitFileSize = (int) (partSize * 1024 * 1024);
    int numberOfPieces = (input.available() / splitFileSize) + 1;
    String fn = "filename.";
    int i = 1;
    int b = 0;
    BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(fn + i));
    while (numberOfPieces > 0) {
        output.write(input.read());
        b++;
        if (b == splitFileSize) {
            output.close();
            i++;
            numberOfPieces--;
            output = new BufferedOutputStream(new FileOutputStream(fn + i));
        }
    }
    output.close();
    input.close();
    System.out.println("Number of files created: ");
    return i;
}

注意:在测试中,我认为它陷入无限循环。知道为什么吗?

谢谢!谢谢你的编辑让事情变得更加清晰!

1 个答案:

答案 0 :(得分:1)

您的代码在运行if时不会重置b值。 您创建一个新文件,但b变量继续增加,因此您的if只会执行一次。 如果将b值设置为0,请尝试在您的内部添加一行。

    if (b == splitFileSize) {
        output.close();
        i++;
        numberOfPieces--;
        output = new BufferedOutputStream(new FileOutputStream(fn + i));
        b=0;
    }