因此,我一直在尝试读取文本文件的内容,并将内容逐块交替写入例如2个新文件中。
我已经尝试了多种方法来实现这一点,但都不起作用(outputstream和fileoutputstream似乎是最合适的)。
在我试着把文件分成三部分,第一部分写在一个文件里,第二部分写在另一个文件里,以此类推。它在outputstream和fileoutputstream中运行得非常好。
但当我想轮流做的时候,它就不起作用了。
我交替地使用循环算法,它本身工作得很好。
如果你能给我举几个例子,我会非常感激的!
public void splitFile(String filePath, int numberOfParts, long sizeOfParts[]) throws FileNotFoundException, IOException, SQLException {
long bytes = 8;
OutputStream partsPath[] = new OutputStream[numberOfParts];
long bytePositition[] = new long[numberOfParts];
long copy_size[] = new long[numberOfParts];
for (int i = 0; i < numberOfParts; i++) {
copy_size[i] = sizeOfParts[i];
partsPath[i] = new FileOutputStream(path); //Gets Path from my Database (works)
//System.out.println(cloudsTable.getCloudsPathsFromDatabase(i) + '\\' + name + (i + 1) + fileType);
}
InputStream file = new FileInputStream(filePath);
while (true) {
boolean done = true;
for (int i = 0; i < numberOfParts; i++) {
if (copy_size[i] > 0) {
done = false;
if (copy_size[i] > bytes) {
copy_size[i] -= bytes;
bytePositition[i] += bytes;
System.out.println("file " + i + " " + bytePositition[i]);
readWrite(file, bytePositition[i], partsPath[i]);
} else {
bytePositition[i] += copy_size[i];
System.out.println("rest file " + i + " " + bytePositition[i]);
readWrite(file, bytePositition[i], partsPath[i]);
copy_size[i] = 0;
}
}
}
if (done == true) {
break;
}
}
file.close();
for (int i = 0; i < partsPath.length; i++) {
partsPath[i].close();
}
}
private void readWrite(InputStream file, long bytes, OutputStream path) throws IOException {
byte[] buf = new byte[(int) bytes];
while (file.read(buf) != -1) {
path.write(buf);
path.flush();
}
}
代码所做的是,它只在第一个复制的文件中写入原始文件的内容,而下面的文件是空的
编辑:为了澄清代码应该做什么,先将前8个字节写入文件1,将第二个8字节写入文件2,将第三个8字节写入文件3,将第四个8字节写入文件1,依此类推,循环,直到文件1的长度为sizeofparts[0],文件2的长度为sizeofparts[1],文件3的长度为sizeofparts[2]。
1条答案
按热度按时间50pmv0ei1#
主要问题是
readWrite()
方法应该只复制一个8字节的字节块,但是有一个循环使它复制输入文件中所有剩余的字节。此外,还应增强代码的使用
try-finally
关闭文件,并正确处理文件结尾,以防输入文件短于部分的总和。我会消除
readWrite()
方法,并合并逻辑以防止重复代码,如下所示: