【问题标题】:Java simple backup and restore ClassJava简单备份和恢复类
【发布时间】:2017-03-03 05:07:25
【问题描述】:

我正在通过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;
}

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

谢谢!感谢您为使事情更清晰而进行的编辑!

【问题讨论】:

  • 你尝试调试了吗?
  • 不,老实说 Eclipse 中的调试对我来说很难掌握。
  • 这是您作为新程序员将获得的最重要的技能之一。不如现在就开始吧。
  • 是的,感谢您让我大开眼界。我实际上完全忘记了它,我必须复习它。

标签: java backup restore


【解决方案1】:

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

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

【讨论】:

  • 这停止了无限循环!谢谢!但现在它没有返回值。
  • 到底发生了什么?返回不同的东西?还是什么都不返回(即抛出异常或错误)?
  • 只是:创建的文件数:然后什么都没有。
  • 这只是印刷品。不是回报。您的 println 没有要打印的变量。
  • 呃。愚蠢的俯视。非常感谢。我对此感到非常尴尬。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 2011-07-02
  • 2021-08-14
  • 2014-07-24
相关资源
最近更新 更多