0

我在 Android 应用程序中使用 ZipOutputStream 来打包和导出 mp3 文件。打包和导出似乎工作正常,提取文件后,它们无法播放。在输出上运行file命令将文件类型显示为data. 在压缩之前,文件类型被列为Audio. 这是我用来压缩文件的代码:

 protected File compressFiles(File outputFile, File... inputFiles) {

    int bufferSize = 1024 * 4; // 4KB
    ZipOutputStream zipOutputStream = null;
    try {
        OutputStream fileOutputStream = new FileOutputStream(outputFile);
        zipOutputStream = new ZipOutputStream(new BufferedOutputStream(fileOutputStream));
        int count = inputFiles.length;
        File file = null;
        for (int i = 0; i < inputFiles.length; i++) {
            file = inputFiles[i];

            String fileName = file.getName();
            ZipEntry entry = new ZipEntry(fileName);
            entry.setTime(file.lastModified());
            FileInputStream inputStream = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

            zipOutputStream.putNextEntry(entry);
            byte[] buffer = new byte[bufferSize];
            int bytesRead;
            while ((bytesRead = bufferedInputStream.read()) != -1) {
                zipOutputStream.write(buffer, 0, bytesRead);
            }

            zipOutputStream.closeEntry();
            inputStream.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (zipOutputStream != null) {
            try {
                zipOutputStream.finish();
               // zipOutputStream.flush();
                zipOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return outputFile;
}
4

1 回答 1

2

您使用了错误的BufferedInputStream.read()方法重载。

您可能打算将byte[] buffer作为参数传递,但是您没有传递任何参数。buffer因此,您只是从变量中写出零。事实上,即使bytesRead变量也有错误的值,因为它返回的是正在读取的实际字节而不是字节数。

要修复,只需更改此行:

while ((bytesRead = bufferedInputStream.read()) != -1) {

对此:

while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
于 2015-12-24T18:49:44.153 回答