Java 简单的备份和恢复 Class
Java simple backup and restore Class
我正在 Java
进行一个学校项目,其中包含一个简单的备份和恢复 class。它有两种方法,一种用于备份,一种用于还原,将文件分解为程序确定的大小块,然后使用还原从这些块中重建文件。
具体我卡在备份部分:
我想将文件拆分成大小等于 partSize 的小块,并创建名为 filename.1, filename.2, etc
的输出文件。然后 return 一个包含创建的文件数的整数。
这是我的代码:
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;
}
注意:在测试中,我认为它陷入了无限循环。知道为什么吗?
谢谢!并感谢您进行编辑以使事情更清楚!
当您的 if 运行 时,您的代码不会重置 b 值。
你创建了一个新文件,但是 b 变量继续增加,所以你的 if 只会执行一次。
尝试在你的 if 中添加一行,将 b 值设置为 0。
if (b == splitFileSize) {
output.close();
i++;
numberOfPieces--;
output = new BufferedOutputStream(new FileOutputStream(fn + i));
b=0;
}
我正在 Java
进行一个学校项目,其中包含一个简单的备份和恢复 class。它有两种方法,一种用于备份,一种用于还原,将文件分解为程序确定的大小块,然后使用还原从这些块中重建文件。
具体我卡在备份部分:
我想将文件拆分成大小等于 partSize 的小块,并创建名为 filename.1, filename.2, etc
的输出文件。然后 return 一个包含创建的文件数的整数。
这是我的代码:
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;
}
注意:在测试中,我认为它陷入了无限循环。知道为什么吗?
谢谢!并感谢您进行编辑以使事情更清楚!
当您的 if 运行 时,您的代码不会重置 b 值。 你创建了一个新文件,但是 b 变量继续增加,所以你的 if 只会执行一次。 尝试在你的 if 中添加一行,将 b 值设置为 0。
if (b == splitFileSize) {
output.close();
i++;
numberOfPieces--;
output = new BufferedOutputStream(new FileOutputStream(fn + i));
b=0;
}