[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement

introduction

Par exemple, lorsque vous souhaitez obtenir un modèle de texte. Si l'environnement de développement et la production sont différents (je pense que c'est presque différent), le chemin absolu dépend de l'environnement. Vous pouvez écrire l'emplacement de chaque environnement dans la propriété, mais il est préférable d'avoir une petite valeur de paramètre et, si possible, de l'inclure dans le fichier jar. Donc, cette fois, c'est un utilitaire pour obtenir les ressources dans le jar.

la mise en oeuvre

environnement

Classe FileUtil

FileUtil.java


package jp.demo.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class FileUtil {
	private static final String CHARSET_UTF8 = "UTF-8";
	private static final String LF = "\n";

	/**
	 *Retourne ligne par ligne dans la liste. (Hors caractères de saut de ligne)
	 * @param string
	 * @return
	 * @throws IOException
	 */
	public static List<String> getTextLines(String string) throws IOException {
		List<String> list = new ArrayList<>();
		try (InputStream is = ClassLoader.getSystemResourceAsStream(string);
				BufferedReader br = new BufferedReader(new InputStreamReader(is, CHARSET_UTF8))) {
			String line;
			while ((line = br.readLine()) != null) {
				list.add(line);
			}
		}
		return list;
	}

	/**
	 *Retourner sous forme de chaîne. (Le code de saut de ligne est LF)
	 * @param string
	 * @return
	 * @throws IOException
	 */
	public static String getTextStr(String string) throws IOException {
		StringBuilder sb = new StringBuilder();
		try (InputStream is = ClassLoader.getSystemResourceAsStream(string);
				BufferedReader br = new BufferedReader(new InputStreamReader(is, CHARSET_UTF8))) {
			String line;
			while ((line = br.readLine()) != null) {
				sb.append(line + LF);
			}
		}
		return sb.toString();
	}
}

Classe principale

Main.java


package jp.demo;

import java.io.IOException;
import java.util.List;

import jp.demo.util.FileUtil;

public class Main {
	public static void main(String[] args) {
		System.out.println("### START ###");
		List<String> list = null;
		String str = null;
		try {
			list = FileUtil.getTextLines("jp/demo/text1.txt");
			str = FileUtil.getTextStr("jp/demo/text1.txt");
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("getTextLines:");
		list.forEach(System.out::println);
		System.out.println("\ngetTextStr:");
		System.out.println(str);

		System.out.println("### END ###");
	}
}

fichier texte

Code de caractère: UTF-8, code de saut de ligne: CRLF Ce qui suit est enregistré dans src / main / resources / jp / demo / text1.txt.

text1.txt


row1 test test
row2 ah
row3 M. Yamada

Courir

Créez un fichier jar par maven install.

Résultat d'exécution

J'ai pu obtenir le fichier texte avec les deux méthodes.

Résultat d'exécution


C:\sts\workspace\simple_maven\target>java -jar test-0.0.1-SNAPSHOT.jar
### START ###
getTextLines:
row1 test test
row2 ah
row3 M. Yamada

getTextStr:
row1 test test
row2 ah
row3 M. Yamada

### END ###

C:\sts\workspace\simple_maven\target>

C'est le cas lorsque le texte est enregistré avec le code de caractère SJIS. ↓

Résultat d'exécution


C:\sts\workspace\simple_maven\target>java -jar test-0.0.1-SNAPSHOT.jar
### START ###
getTextLines:
row1 test test
row2 ??????
row3 ?R?c????

getTextStr:
row1 test test
row2 ??????
row3 ?R?c????

### END ###

C:\sts\workspace\simple_maven\target>

J'ai lu le texte SJIS en UTF-8, donc les caractères étaient déformés. Ensuite, lorsqu'un caractère qui n'existe pas dans SJIS (le célèbre est "Taka" de Takahashi) est sorti sous forme de fichier avec le jeu de caractères SJIS, il est remplacé par "?".

De côté

Sur Eclipse, les projets Maven sont src / main / ** java **, src / main / ** resources ** Cependant, une fois que vous l'avez construit, ce sera le même, donc c'est le même quel que soit l'endroit où vous enregistrez le texte.

Développez jar et jp/demo/Regarder sous


C:\Users\xxx\Desktop\test-0.0.1-SNAPSHOT\jp\répertoire de démonstration

2019/06/12  00:57    <DIR>          .
2019/06/12  00:57    <DIR>          ..
2019/06/12  00:27             1,815 Main.class
2019/06/11  01:39                26 text1.txt
2019/06/12  00:57    <DIR>          util

Recommended Posts

[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Obtenez l'URL publique du fichier privé de Flickr en Java
Comment obtenir la longueur d'un fichier audio avec Java
JAVA: jar, aar, affichez le contenu du fichier
Obtenez l'URL de la destination de la redirection HTTP en Java
Remplacez le contenu du fichier Jar
Examiner les informations système de l'environnement d'exploitation AWS Lambda en Java
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
[Java] Obtenez le jour d'un jour spécifique
Comment obtenir la date avec Java
L'histoire de l'écriture de Java dans Emacs
[Java8] Recherchez le répertoire et récupérez le fichier
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
L'histoire de la comparaison de chaînes de bas niveau en Java
L'histoire de la fabrication d'un Othello ordinaire à Java
À propos de l'idée des classes anonymes en Java
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
[Java] Obtenir la longueur de la chaîne de paire de substitution
Ressentez le passage du temps même à Java
Renommez le nom du package d'un fichier jar existant
[Java] Lire les fichiers dans src / main / resources
Importer des fichiers de la même hiérarchie en Java
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
[Java] Comment obtenir l'URL de la source de transition
Accédez au fichier war dans le répertoire racine de Tomcat
Obtenez le nom du scénario de test dans la classe de test JUnit
Inclure l'image dans le fichier jar avec la méthode statique java
[Java] Comment obtenir la valeur maximale de HashMap
Source utilisée pour obtenir l'URL de la source de redirection en Java
Modifier la qualité de stockage des images JPEG en Java
Comment déboguer le fichier jar généré avec Eclipse
SSL dans l'environnement local de Docker / Rails / puma
Obtenez l'URL de la destination de la redirection HTTP dans Ruby
Récapitulez les éléments supplémentaires de la classe Optional dans Java 9
[Java] Informations entières des caractères du fichier texte acquises par la méthode read ()
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Surveillez facilement l'environnement intérieur ~ ⑨ Obtenez la détection de mouvement (HC-SR501 / RCWL-0516) avec Java (GPIO / Pi4J) ~
[Java] [Maven] Modèle de pom.xml pour enregistrer le fichier jar tiers dans le référentiel local
Obtenir des informations EXIF en Java
[Java] Obtenir KClass en Java [Kotlin]
Construction de l'environnement JavaFX dans Java 13
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
Implémentation Java de tri-tree
Comment obtenir le nom d'une classe / méthode exécutée en Java
A été effectué dans l'année de base de la semaine calendaire Java
Générer et exécuter le fichier Jar du fichier Java appartenant au package
Une explication rapide des cinq types de statique Java
Obtenu le jour ouvrable suivant la date spécifiée avec JAVA
Mettez le fichier dans les propriétés de string avec la configuration spring xml
Accédez à l'abréviation à partir de 5 exemples de listes Java en italique
Installer en spécifiant la version de Django dans l'environnement Docker
Activez la cellule A1 de chaque feuille de fichier Excel avec Java
Comptez le nombre de chiffres après la virgule décimale en Java
Obtenir des attributs et des valeurs à partir d'un fichier XML en Java