[JAVA] L'histoire que je voulais développer Zip

Déclencheur

Lors de l'échange de fichiers ZIP au travail, le créateur ZIP était un utilisateur Mac et c'était Windows. Comme vous pouvez le voir à ce stade, le nom de l'entrée est ZIP avec UTF-8 sur Mac. Dans le déploiement ZIP standard de Windows, le nom de l'entrée est déformé car il est développé avec Windows-31j (Shift-JIS) dans l'environnement japonais. ~~ Je ne comprends toujours pas la signification de lutter avec les codes de caractères. ~~

C'est fini quand j'ai mis en place un logiciel libre prenant en charge UTF-8, Comme je travaille en tant que client résident, je peux le télécharger sans permission, et comme c'est un gros problème, j'ai décidé de le résoudre moi-même.

Déployer en Java pour le moment

Référence: http://www.ne.jp/asahi/hishidama/home/tech/java/zip.html Il a été presque résolu sur la page de stabilité de M. Hishidama. ..

ZipDecoder.java


import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.zip.ZipFile;

public class ZipDecoder {

	private static final String ZIP_FILE = "C:\\temp\\dossier.zip";

	public static void main(String[] args) {
		decode(ZIP_FILE);
	}

	public static void decode(String strPath) {
		if (strPath == null || !strPath.toLowerCase().endsWith(".zip")) {
			System.out.println("Argument is not zip file.");
			return;
		}
		Path zipFilePath = Paths.get(strPath);
		String outDir = zipFilePath.toString().replace(".zip", "");
		if (Files.notExists(zipFilePath)) {
			System.out.println("Argument is not file path.");
			return;
		}
		try (ZipFile zipFile = new ZipFile(zipFilePath.toFile(), Charset.forName("UTF-8"))) {
			zipFile.stream().filter(entry -> !entry.isDirectory()).forEach(entry -> {
				Path outName = Paths.get(outDir, entry.getName());
				try {
					Files.createDirectories(outName.getParent());
				} catch (IOException e1) {
					throw new UncheckedIOException(e1);
				}
				try (InputStream is = zipFile.getInputStream(entry);
						BufferedOutputStream os = new BufferedOutputStream(Files.newOutputStream(outName))) {
					byte[] buf = new byte[1024];
					while (is.read(buf) >= 0) {
						os.write(buf);
					}
				} catch (IOException e) {
					throw new UncheckedIOException(e);
				}
			});

		} catch (IOException e) {
			throw new UncheckedIOException(e);
		}
	}
}

Réutilisation

Puisque l'échange de fichiers ZIP est toujours en cours, je vais le recréer pour qu'il puisse être utilisé. Transmettez le nom du fichier en tant qu'argument de démarrage afin qu'il puisse être développé par glisser-déposer. Il semble que jar puisse être transformé en fichier exe en utilisant quelque chose appelé launch4j, mais comme il réside chez le client (

Référence: https://qiita.com/bugtrap/items/15864474076767a7a957

ZipDecoder.java


import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.zip.ZipFile;

public class ZipDecoder {

	public static void main(String[] args) {
		if (args.length == 0) {
			System.out.println("There are no Arguments.");
		}
		Arrays.asList(args).stream().forEach(ZipDecoder::decode);
	}

	public static void decode(String strPath) {
		if (strPath == null || !strPath.toLowerCase().endsWith(".zip")) {
			System.out.println("Argument is not zip file.");
			return;
		}
		Path zipFilePath = Paths.get(strPath);
		String outDir = zipFilePath.toString().replace(".zip", "");
		if (Files.notExists(zipFilePath)) {
			System.out.println("Argument is not file path.");
			return;
		}
		try (ZipFile zipFile = new ZipFile(zipFilePath.toFile(), Charset.forName("UTF-8"))) {
			zipFile.stream().filter(entry -> !entry.isDirectory()).forEach(entry -> {
				Path outName = Paths.get(outDir, entry.getName());
				try {
					Files.createDirectories(outName.getParent());
				} catch (IOException e1) {
					throw new UncheckedIOException(e1);
				}
				try (InputStream is = zipFile.getInputStream(entry);
						BufferedOutputStream os = new BufferedOutputStream(Files.newOutputStream(outName))) {
					byte[] buf = new byte[1024];
					while (is.read(buf) >= 0) {
						os.write(buf);
					}
				} catch (IOException e) {
					throw new UncheckedIOException(e);
				}
			});

		} catch (IOException e) {
			throw new UncheckedIOException(e);
		}
	}
}

call-decoder.bat


@echo off

contrôle de commande rem
where java 2> nul > nul || goto :notfound

java -jar ZipDecoder.jar %*

Echo Déploiement terminé
goto :end

:notfound
mettre la commande echo java dans PATH
goto :end

:end
pause

Sélectionnez deux fichiers zip et faites-les glisser et déposez-les dans le fichier bat

image.png

J'ai pu l'agrandir par glisser-déposer.

image.png

Difficile d'avoir deux fichiers java et un fichier bat

Vous devriez créer un fichier java dans bat, le compiler et l'utiliser, non? Alors j'ai essayé.

decord.bat


@echo off

contrôle de commande rem
where java 2> nul > nul || goto :notfound

echo import java.io.BufferedOutputStream;                                                                         > ZipDecoder.java
echo import java.io.IOException;                                                                                  >> ZipDecoder.java
echo import java.io.InputStream;                                                                                  >> ZipDecoder.java
echo import java.io.UncheckedIOException;                                                                         >> ZipDecoder.java
echo import java.nio.charset.Charset;                                                                             >> ZipDecoder.java
echo import java.nio.file.Files;                                                                                  >> ZipDecoder.java
echo import java.nio.file.Path;                                                                                   >> ZipDecoder.java
echo import java.nio.file.Paths;                                                                                  >> ZipDecoder.java
echo import java.util.Arrays;                                                                                     >> ZipDecoder.java
echo import java.util.zip.ZipFile;                                                                                >> ZipDecoder.java
echo public class ZipDecoder {                                                                                    >> ZipDecoder.java
echo 	public static void main(String[] args) {                                                                  >> ZipDecoder.java
echo 		if (args.length == 0) {                                                                               >> ZipDecoder.java
echo 			System.out.println("There are no Arguments.");                                                    >> ZipDecoder.java
echo 		}                                                                                                     >> ZipDecoder.java
echo 		Arrays.asList(args).stream().forEach(ZipDecoder::decode);                                             >> ZipDecoder.java
echo 	}                                                                                                         >> ZipDecoder.java
echo 	public static void decode(String strPath) {                                                               >> ZipDecoder.java
echo 		if (strPath == null ^|^| !strPath.toLowerCase().endsWith(".zip")) {                                     >> ZipDecoder.java
echo 			System.out.println("Argument is not zip file.");                                                  >> ZipDecoder.java
echo 			return;                                                                                           >> ZipDecoder.java
echo 		}                                                                                                     >> ZipDecoder.java
echo 		Path zipFilePath = Paths.get(strPath);                                                                >> ZipDecoder.java
echo 		String outDir = zipFilePath.toString().replace(".zip", "");                                           >> ZipDecoder.java
echo 		if (Files.notExists(zipFilePath)) {                                                                   >> ZipDecoder.java
echo 			System.out.println("Argument is not file path.");                                                 >> ZipDecoder.java
echo 			return;                                                                                           >> ZipDecoder.java
echo 		}                                                                                                     >> ZipDecoder.java
echo 		try (ZipFile zipFile = new ZipFile(zipFilePath.toFile(), Charset.forName("UTF-8"))) {                 >> ZipDecoder.java
echo 			zipFile.stream().filter(entry -^> !entry.isDirectory()).forEach(entry -^> {                         >> ZipDecoder.java
echo 				Path outName = Paths.get(outDir, entry.getName());                                            >> ZipDecoder.java
echo 				try {                                                                                         >> ZipDecoder.java
echo 					Files.createDirectories(outName.getParent());                                             >> ZipDecoder.java
echo 				} catch (IOException e1) {                                                                    >> ZipDecoder.java
echo 					throw new UncheckedIOException(e1);                                                       >> ZipDecoder.java
echo 				}                                                                                             >> ZipDecoder.java
echo 				try (InputStream is = zipFile.getInputStream(entry);                                          >> ZipDecoder.java
echo 						BufferedOutputStream os = new BufferedOutputStream(Files.newOutputStream(outName))) { >> ZipDecoder.java
echo 					byte[] buf = new byte[1024];                                                              >> ZipDecoder.java
echo 					while (is.read(buf) ^>= 0) {                                                               >> ZipDecoder.java
echo 						os.write(buf);                                                                        >> ZipDecoder.java
echo 					}                                                                                         >> ZipDecoder.java
echo 				} catch (IOException e) {                                                                     >> ZipDecoder.java
echo 					throw new UncheckedIOException(e);                                                        >> ZipDecoder.java
echo 				}                                                                                             >> ZipDecoder.java
echo 			});                                                                                               >> ZipDecoder.java
echo 		} catch (IOException e) {                                                                             >> ZipDecoder.java
echo 			throw new UncheckedIOException(e);                                                                >> ZipDecoder.java
echo 		}                                                                                                     >> ZipDecoder.java
echo 	}                                                                                                         >> ZipDecoder.java
echo }                                                                                                            >> ZipDecoder.java

javac ZipDecoder.java

java ZipDecoder %*

del ZipDecoder.java
del ZipDecoder.class

Echo Déploiement terminé
goto :end

:notfound
mettre la commande echo java dans PATH
goto :end

:end
pause

Après avoir échappé à certains symboles, j'ai pu sortir normalement.

image.png

Faites glisser et déposez le fichier zip

image.png

J'ai pu le déployer.

Supplément

Cette source peut être utilisée si le chemin est java8 ou supérieur.

Recommended Posts

L'histoire que je voulais développer Zip
Je voulais ajouter @VisibleForTesting à la méthode
J'ai essayé d'expliquer la méthode
L'histoire à laquelle j'étais accro lors de la création de STS
Je voulais faciliter la programmation JavaFX avec Spring Framework
J'ai essayé de résumer les méthodes utilisées
J'étais accro à la méthode du rouleau
J'ai essayé d'implémenter le modèle Iterator
J'étais accro au test Spring-Batch
J'ai essayé de résumer l'API Stream
Je suis allé au Java Women's Club # 1
C'était une vie que je voulais réinitialiser le compteur associatif thread-safe
Après tout, je voulais prévisualiser le contenu de mysql avec Docker ...
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
J'ai essayé d'organiser la session en Rails
L'histoire de l'introduction de la communication Ajax à Ruby
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
Je veux var_dump le contenu de l'intention
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Code utilisé pour connecter Rails 3 à PostgreSQL 10
L'histoire de l'ajout du dernier Node.js à DockerFile
J'ai essayé de configurer tomcat pour exécuter le servlet.
Je veux tronquer après la virgule décimale
Je voulais classer la botte à ressort dans un multi-projet
Je veux obtenir la valeur en Ruby
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
[Petite histoire] J'ai essayé de rendre java ArrayList un peu plus pratique
Je voulais démarrer un serveur AP et déboguer avec juste la commande Maven
J'étais accro à NoSuchMethodError dans Cloud Endpoints
J'ai essayé ce que je voulais essayer avec Stream doucement.
[Java] Je souhaite calculer la différence par rapport à la date
Je veux intégrer n'importe quel TraceId dans le journal
Tokoro j'ai réécrit dans la migration de Wicket 7 à 8
J'étais accro au record du modèle associé
05. J'ai essayé de supprimer la source de Spring Boot
Je veux juger la gamme en utilisant le diplôme mensuel
Que dois-je faire pour recharger le Dockerfile mis à jour?
Je veux connaître la réponse de l'application Janken
[Rails] Je ne sais pas comment utiliser le modèle ...
Je souhaite afficher le nom de l'affiche du commentaire
Je souhaite utiliser le mode sombre avec l'application SWT
Je veux appeler la méthode principale en utilisant la réflexion
[Commentaire approximatif] Je veux épouser la méthode du pluck
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
Je veux retourner la position de défilement de UITableView!
Je souhaite simplifier la sortie du journal sur Android
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Une histoire que j'ai réalisé que je devais étudier en premier lieu en tant qu'ingénieur
Je ne trouve pas l'image du docker après la mise à jour vers Docker Desktop 2.4.0.0
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
J'ai essayé d'implémenter la fonction similaire par communication asynchrone
[Débutant] Je souhaite modifier le fichier de migration-Comment utiliser la restauration-