在 linux下进行 zip,然后在 linux 下 unzip或者直接下载,中文的文件名会乱码。
我查了一下,可以通过 entry.setUnixMode 的方式,将 platform 设置为 Unix,如下:

Java代码 复制代码
  1. public void setUnixMode(int mode) {   
  2.     // CheckStyle:MagicNumberCheck OFF - no point   
  3.     setExternalAttributes((mode << 16)   
  4.                           // MS-DOS read-only attribute   
  5.                           | ((mode & 0200) == 0 ? 1 : 0)   
  6.                           // MS-DOS directory flag   
  7.                           | (isDirectory() ? 0x10 : 0));   
  8.     // CheckStyle:MagicNumberCheck ON   
  9.     platform = PLATFORM_UNIX;   
  10. }  
    public void setUnixMode(int mode) {
        // CheckStyle:MagicNumberCheck OFF - no point
        setExternalAttributes((mode << 16)
                              // MS-DOS read-only attribute
                              | ((mode & 0200) == 0 ? 1 : 0)
                              // MS-DOS directory flag
                              | (isDirectory() ? 0x10 : 0));
        // CheckStyle:MagicNumberCheck ON
        platform = PLATFORM_UNIX;
    }


这样在解压的时候,就不需要绕过去了。

另外:要使用 ant 的 zip class,才能解决中文文件名乱码问题,JDK默认的我暂时还不知道如何做。

Java代码 复制代码
  1. import org.apache.tools.zip.ZipEntry;   
  2. import org.apache.tools.zip.ZipOutputStream;   
  3.     public static void write(File path, File zipFile) throws IOException {   
  4.         ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFile));   
  5.         zip.setEncoding("GBK");   
  6.         Util.write(path, path, zip);   
  7.         zip.close();   
  8.     }   
  9.   
  10.     private static void write(File base, File path, ZipOutputStream zip) throws IOException {   
  11.         URI rel = base.toURI().relativize(path.toURI());   
  12.         if (path.isDirectory()) {   
  13.             ZipEntry entry = new ZipEntry(rel.getPath());   
  14.             entry.setUnixMode(755);   
  15.             zip.putNextEntry(entry);   
  16.             zip.closeEntry();   
  17.             File[] files = path.listFiles();   
  18.             for (File file : files) {   
  19.                 write(base, file, zip);   
  20.             }   
  21.         } else {   
  22.             ZipEntry entry = new ZipEntry(rel.getPath());   
  23.             entry.setUnixMode(644);   
  24.             zip.putNextEntry(entry);   
  25.             FileInputStream is = new FileInputStream(path);   
  26.             zip.write(IOUtils.toByteArray(is));   
  27.             is.close();   
  28.             zip.closeEntry();   
  29.         }   
  30.     }  
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐