BZip2 - 为不同类型的文件传递给FileOutputstream的内容

时间:2014-08-18 15:59:32

标签: java bzip2 compression

我正在尝试提取下面提到的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。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

BZ2档案馆对原始名称一无所知。通常的做法是将file.ext压缩为file.ext.bz2,以便从存档名称中获取输出文件名。

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