Maison >Java >JavaBase >Solution pour compresser le code tronqué en Java (avec code)

Solution pour compresser le code tronqué en Java (avec code)

尚
original
2019-11-26 10:52:132753parcourir

Solution pour compresser le code tronqué en Java (avec code)

Utilisez Java pour empaqueter des fichiers afin de générer des fichiers compressés. Il existe deux endroits où les caractères tronqués apparaîtront (recommandé : tutoriel de base Java)

1. Contenu De nombreuses personnes sur Internet ont proposé des solutions au problème de la confusion chinoise. Il existe deux solutions : modifier le code source de Sun ; utiliser les bibliothèques de classes open source org.apache.tools.zip.ZipOutputStream et org.apache.tools. .zip.ZipEntry. Il existe deux classes dans ant.jar, qui peuvent être téléchargées et utilisées. Il ne fait aucun doute qu'il est plus pratique de choisir cette dernière.

2. Le problème des caractères chinois tronqués dans les commentaires des fichiers compressés : zos.setComment("Chinese test"); J'ai vérifié ce problème en ligne pendant longtemps et je n'ai vu personne l'expliquer, j'ai donc dû pour trouver un moyen de le résoudre moi-même.

Il n'y a eu aucun problème avec les classes de test créées par le projet sur ma propre machine, mais lorsqu'elles étaient utilisées dans les projets de l'entreprise, des caractères tronqués continuaient à apparaître en utilisant la méthode de définition de l'encodage (zos.setEncoding(" gbk");), J'ai finalement découvert le problème. La méthode d'encodage du projet de test est gbk, et l'encodage par défaut du projet de l'entreprise est utf-8, donc il n'y a pas de problème avec le projet de test mais il y a un problème avec le projet de l'entreprise.

org.apache.tools.zip.ZipOutputStream utilise la méthode d'encodage du projet par défaut. Théoriquement, utf-8 prend également en charge le chinois. Si vous ne comprenez pas pourquoi il est toujours tronqué, changez simplement. à gbk via la méthode setEncoding.

Joindre un code pour compresser le fichier

package com.compress;  
  
import java.io.BufferedInputStream;  
import java.io.BufferedOutputStream;  
import java.io.DataInputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
  
import org.apache.tools.zip.ZipEntry;  
import org.apache.tools.zip.ZipOutputStream;  
  
public class CompressEncodingTest {  
  
    /** 
     * @param args 
     * @throws Exception 
     */  
    public static void main(String[] args) throws Exception {  
        File f = new File("中文测试.txt");  
        ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(  
                new FileOutputStream("zipTest.zip"), 1024));  
        zos.putNextEntry(new ZipEntry("中国人.txt"));  
        DataInputStream dis = new DataInputStream(new BufferedInputStream(  
                new FileInputStream(f)));  
        zos.putNextEntry(new ZipEntry(f.getName()));  
        int c;  
        while ((c = dis.read()) != -1) {  
            zos.write(c);  
        }  
  
        zos.setEncoding("gbk");  
        zos.setComment("中文测试");  
  
        zos.closeEntry();  
        zos.close();  
    }  
  
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn