Java BZip2-对于不同类型的文件,要传递给FileOutputstream的内容

Java BZip2-对于不同类型的文件,要传递给FileOutputstream的内容,java,bzip2,compression,Java,Bzip2,Compression,我正试图提取一个bz2文件,如下所述,这是我编写的一个测试类,我知道它在未压缩时是.txt文件,但当我实际从服务器读取它时,未压缩的bz2文件可以是html、tar、tgz或文本文件,我怎样才能使这段代码具有通用性,从而使它适用于任何类型的文件 我想解压不同的文件,如果是test.txt.bz2,那么解压到test.txt和6223.webvis.html_20130803195241.bz2到6223.webvis.html_20130803195241。如何使我的代码具有通用性,使其适用于这

我正试图提取一个bz2文件,如下所述,这是我编写的一个测试类,我知道它在未压缩时是.txt文件,但当我实际从服务器读取它时,未压缩的bz2文件可以是html、tar、tgz或文本文件,我怎样才能使这段代码具有通用性,从而使它适用于任何类型的文件

我想解压不同的文件,如果是test.txt.bz2,那么解压到test.txt和6223.webvis.html_20130803195241.bz2到6223.webvis.html_20130803195241。如何使我的代码具有通用性,使其适用于这两种不同的场景

try{
FileInputStream fin = new FileInputStream("C:\\temp\\test.txt.bz2");
BufferedInputStream in = new BufferedInputStream(fin);
FileOutputStream out = new FileOutputStream("C:\\temp\\test.txt");
BZip2CompressorInputStream bzIn = new BZip2CompressorInputStream(in);
int buffersize = 1024;
final byte[] buffer = new byte[buffersize];
int n = 0;
while (-1 != (n = bzIn.read(buffer))) {
out.write(buffer, 0, n);
}
out.close();
bzIn.close();
}
catch (Exception e) {
throw new Error(e.getMessage());
}
}
谢谢,
Akshitha.

正常模式是名为x的文件保存为x.bz2,因此输出文件名是输入文件名,最后四个字符已删除。唯一已知的例外是x.tar->x.tbz(但有些人使用x.tar.bz2)


这意味着您的示例不遵循正常模式;否则它将是test.txt.bz2。

bz2归档文件不知道关于原始名称的任何信息。通常的方法是将
file.ext
压缩为
file.ext.bz2
,以便从归档文件名中获取输出文件名

String inFile = "test.bz2";
String outFile = inFile.substring(0, inFile.length() - 4);
// outFile == "test"

我提到的不正确,我有以下文件test.txt,这是一个bz2归档文件,即test.txt.bz2和123.test.html_2013.bz2,它们是不同的文件。作为要在输出流中传递的参数,我应该提到什么?因为我不相信未压缩的文件名是123.test.html_2013,我认为你做得不对,因此有一个不可能问的问题。这是我的实际文件名6223.webvis.html_20130803195241.bz2,我被告知给给你这些文件名的人。我问了,他提到有webvis.html文件