如何重命名提取的文件

时间:2015-10-29 07:45:05

标签: java

我正在编写一个java程序,它将解压缩zip文件并将其中的文件重命名为zip文件名。例如:zip文件名为zip.zip,其中的文件为content.txt。在这里,我想解压缩zip文件,content.txt必须重命名为zip.txt。我正在尝试以下计划。

此处zip文件中只有一个文件

Zip.Java

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class zip {
    private static final int BUFFER_SIZE = 4096;

    public void unzip(String zipFilePath, String destDirectory) throws IOException {
        File destDir = new File(destDirectory);
        if (!destDir.exists()) {
            destDir.mkdir();
        }
        ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
        ZipEntry entry = zipIn.getNextEntry();
        while (entry != null) {
            String filePath = destDirectory + File.separator + entry.getName();
            if (!entry.isDirectory()) {
                // if the entry is a file, extracts it
                extractFile(zipIn, filePath, zipFilePath);
            } else {
                // if the entry is a directory, make the directory
                File dir = new File(filePath);
                dir.mkdir();
            }
            zipIn.closeEntry();
            entry = zipIn.getNextEntry();
        }
        zipIn.close();
    }

    private void extractFile(ZipInputStream zipIn, String filePath, String zipFilePath) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));

        byte[] bytesIn = new byte[BUFFER_SIZE];
        int read = 0;
        while ((read = zipIn.read(bytesIn)) != -1) {
            bos.write(bytesIn, 0, read);
        }
        File oldName = new File(filePath);
        System.out.println(oldName);
        String str = zipFilePath.substring(zipFilePath.lastIndexOf("\\") + 1, zipFilePath.lastIndexOf("."));
        System.out.println(str);
        File zipPath = new File(zipFilePath);
        System.out.println(zipPath.getParent());
        File newName = new File(zipPath.getParent() + "\\" + str);
        System.out.println(newName);
        if (oldName.renameTo(newName)) {
            System.out.println("Renamed");
        } else {
            System.out.println("Not Renamed");
        }

        bos.close();
    }

}

UnZip.Java

public class UnZip {
    public static void main(String[] args) {
        String zipFilePath = "C:\\Users\\u0138039\\Desktop\\Proview\\Zip\\New Companies Ordinance (Vol Two)_xml.zip";
        String destDirectory = "C:\\Users\\u0138039\\Desktop\\Proview\\Zip";
        zip unzipper = new zip();
        try {
            unzipper.unzip(zipFilePath, destDirectory);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

这里我能够提取文件但无法重命名。请让我知道我哪里出错了以及如何解决它。

由于

1 个答案:

答案 0 :(得分:1)

在最后一次写入指令之后(在while循环之后)直接关闭BufferedOutputStream。只有这样它才会释放对文件的锁定,并且你能够重命名该文件。

请参阅:http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html#close()