在JarOutputStream中更改文件名

时间:2015-11-19 11:04:21

标签: java file rename

所以我一直在使用Derby DB,可以写入并处理数据。我现在正试图将其打包到一个存档文件(jar)中。我可以得到它打包和解包没有问题。好吧除了一个。 我可以把它打包到一个罐子里,但它有一个额外的文件夹深度。因此,如果我打包名为" 12月和#34;的目录,并且在该存档中我也会得到一个" 12月"包含其中内容的文件夹。有没有办法可以在打包或拆包时删除多余的文件夹?

我尝试使用该文件的名称,但如果我弄乱它,我会收到错误,说我重命名后无法找到该文件。我在包装之前和打开包装时都试过这个。我得到的是主目录中的每个文件名,但所有文件都是0kb。我甚至尝试将包目录更改为" December *",但它不是那样的。

public class JarPack {
public static void pack(String name,String dir) throws FileNotFoundException, IOException{
    System.out.println(dir);
    Manifest manifest = new Manifest();
    manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
    JarOutputStream target = new JarOutputStream(new FileOutputStream(name), manifest);
    add(new File(dir), target);
    target.close();
}

private static void add(File source, JarOutputStream target) throws IOException{
    BufferedInputStream in = null;
    try
    {
        if (source.isDirectory())
        {
            String name = source.getPath().replace("\\", "/");
            if (!name.isEmpty())
            {
                if (!name.endsWith("/"))
                    name += "/";
                JarEntry entry = new JarEntry(name);
                entry.setTime(source.lastModified());
                target.putNextEntry(entry);
                target.closeEntry();
            }
            for (File nestedFile: source.listFiles())
                add(nestedFile, target);
            return;
        }

        JarEntry entry = new JarEntry(source.getPath().replace("\\", "/"));
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        in = new BufferedInputStream(new FileInputStream(source));

        byte[] buffer = new byte[1024];
        while (true)
        {
            int count = in.read(buffer);
            if (count == -1)
                break;
            target.write(buffer, 0, count);
        }
        target.closeEntry();
    }
    finally{
        if (in != null)
            in.close();
    }
}
@SuppressWarnings("resource")
public static void unPack(String name,String dir) throws java.io.IOException {
    java.util.jar.JarFile jarfile = new java.util.jar.JarFile(new java.io.File(name));
    java.util.Enumeration<java.util.jar.JarEntry> enu= jarfile.entries();
    while(enu.hasMoreElements()){
        String destdir = dir;
        java.util.jar.JarEntry je = enu.nextElement();

        if (!je.getName().equals("META-INF/MANIFEST.MF")){
            java.io.File fl = new java.io.File(destdir, je.getName());
            if(!fl.exists()){
                fl.getParentFile().mkdirs();
                fl = new java.io.File(destdir, je.getName());
            }
            if(je.isDirectory()){
                continue;
            }
            java.io.InputStream is = jarfile.getInputStream(je);
            java.io.FileOutputStream fo = new java.io.FileOutputStream(fl);
            while(is.available()>0){
                fo.write(is.read());
            }
            fo.close();
            is.close();
        }
    }
}

}

0 个答案:

没有答案
相关问题