使用 java 合并多个文件
Merge multiple files using java
我有一个分段文件。我必须将它们全部合并到文件中。我正在使用 RandomAccessFile 合并它们并且它工作正常但是对于较大的文件它非常慢。
这是我用来合并它们的代码:
RandomAccessFile outFile = new RandomAccessFile(filename, "rw");
long len = 0;
//inFiles is a LinkedList<String> conatining all file part names
for (String inFileName : inFiles) {
RandomAccessFile inFile = new RandomAccessFile(inFileName, "r");
int data;
outFile.seek(len);
while ((data = inFile.read()) != -1) {
outFile.writeByte(data);
}
len += inFile.length();
inFile.close();
}
outFile.close();
是否有任何其他合并文件的方法可能比此方法更快?...
请帮我优化这段代码。
正如 Nemo_64 指出的那样,您一次使用 read() 字节,这在大文件上会非常慢。由于您并没有真正使用 RandomAccessFile 进行随机访问,因此仅使用顺序流 IO 就足够了,例如:
try(OutputStream out = Files.newOutputStream(Paths.get(filename), StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
for (String inFileName : inFiles) {
Files.copy(Paths.get(inFileName), out);
}
}
我有一个分段文件。我必须将它们全部合并到文件中。我正在使用 RandomAccessFile 合并它们并且它工作正常但是对于较大的文件它非常慢。
这是我用来合并它们的代码:
RandomAccessFile outFile = new RandomAccessFile(filename, "rw");
long len = 0;
//inFiles is a LinkedList<String> conatining all file part names
for (String inFileName : inFiles) {
RandomAccessFile inFile = new RandomAccessFile(inFileName, "r");
int data;
outFile.seek(len);
while ((data = inFile.read()) != -1) {
outFile.writeByte(data);
}
len += inFile.length();
inFile.close();
}
outFile.close();
是否有任何其他合并文件的方法可能比此方法更快?... 请帮我优化这段代码。
正如 Nemo_64 指出的那样,您一次使用 read() 字节,这在大文件上会非常慢。由于您并没有真正使用 RandomAccessFile 进行随机访问,因此仅使用顺序流 IO 就足够了,例如:
try(OutputStream out = Files.newOutputStream(Paths.get(filename), StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
for (String inFileName : inFiles) {
Files.copy(Paths.get(inFileName), out);
}
}