[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR

Einführung

Zum Beispiel, wenn Sie eine Textvorlage erhalten möchten. Wenn die Entwicklungsumgebung und die Produktion unterschiedlich sind (ich denke, es ist fast anders), ist der absolute Pfad umweltabhängig, nicht wahr? Sie können den Speicherort für jede Umgebung in die Eigenschaft schreiben, es ist jedoch besser, einen kleinen Einstellungswert zu haben und ihn nach Möglichkeit in das Glas aufzunehmen. Diesmal ist es also ein Dienstprogramm, um die Ressourcen in das Glas zu bekommen.

Implementierung

Umgebung

FileUtil-Klasse

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";

	/**
	 *Zeile für Zeile in Liste zurückgeben. (Ohne Zeilenvorschubzeichen)
	 * @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;
	}

	/**
	 *Als String zurückgeben. (Zeilenvorschubcode ist 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();
	}
}

Hauptklasse

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 ###");
	}
}

Textdatei

Zeichencode: UTF-8, Zeilenvorschubcode: CRLF Folgendes wird in src / main / resources / jp / demo / text1.txt gespeichert.

text1.txt


row1 test test
row2 ah
row3 Mr. Yamada

Lauf

Erstellen Sie ein Glas von maven install.

Ausführungsergebnis

Ich konnte die Textdatei mit beiden Methoden abrufen.

Ausführungsergebnis


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

getTextStr:
row1 test test
row2 ah
row3 Mr. Yamada

### END ###

C:\sts\workspace\simple_maven\target>

Dies ist der Fall, wenn der Text mit dem Zeichencode SJIS gespeichert wird. ↓

Ausführungsergebnis


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>

Ich habe den SJIS-Text in UTF-8 gelesen, daher waren die Zeichen verstümmelt. Wenn dann ein Zeichen, das in SJIS nicht vorhanden ist (das berühmte ist Takahashis "Taka"), als Datei mit dem Zeichensatz SJIS ausgegeben wird, wird es durch "?" Ersetzt.

Beiseite

In Eclipse sind Maven-Projekte src / main / ** java **, src / main / ** resources ** Sobald Sie es erstellt haben, ist es jedoch dasselbe, sodass es unabhängig davon, wo Sie den Text speichern, dasselbe ist.

Erweitern Sie jar und jp/demo/Schau unter


C:\Users\xxx\Desktop\test-0.0.1-SNAPSHOT\jp\Demo-Verzeichnis

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] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab
So ermitteln Sie die Länge einer Audiodatei mit Java
JAVA: jar, aar, zeige den Inhalt der Datei an
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
Ersetzen Sie den Inhalt der Jar-Datei
Untersuchen Sie die Systeminformationen der AWS Lambda-Betriebsumgebung in Java
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
[Java] Ermittelt den Tag eines bestimmten Tages
So erhalten Sie das Datum mit Java
Die Geschichte des Schreibens von Java in Emacs
[Java8] Durchsuchen Sie das Verzeichnis und holen Sie sich die Datei
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
[Java] Holen Sie sich MimeType aus dem Inhalt der Datei mit Apathce Tika [Kotlin]
Die Geschichte des einfachen String-Vergleichs in Java
Die Geschichte eines gewöhnlichen Othello in Java
Über die Idee anonymer Klassen in Java
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
Spüren Sie den Lauf der Zeit auch in Java
Benennen Sie den Paketnamen einer vorhandenen JAR-Datei um
[Java] Dateien in src / main / resources lesen
Importieren Sie Dateien derselben Hierarchie in Java
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
Beispielcode zum Abrufen der wichtigsten SQL-Typwerte in Java + MySQL 8.0
[Java] So erhalten Sie die URL der Übergangsquelle
Greifen Sie auf die War-Datei im Stammverzeichnis von Tomcat zu
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
Fügen Sie das Bild mit der statischen Java-Methode in die JAR-Datei ein
[Java] So erhalten Sie den Maximalwert von HashMap
Quelle zum Abrufen der Umleitungsquell-URL in Java
Ändern Sie die Speicherqualität von JPEG-Bildern in Java
So debuggen Sie die generierte JAR-Datei mit Eclipse
SSL in der lokalen Umgebung von Docker / Rails / Puma
Rufen Sie die URL des HTTP-Umleitungsziels in Ruby ab
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
[Java] Ganzzahlige Informationen von Zeichen in der Textdatei, die mit der Methode read () erfasst wurden
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Einfache Überwachung der Innenumgebung - ⑨ Erfassen Sie die Bewegungserkennung (HC-SR501 / RCWL-0516) mit Java (GPIO / Pi4J) -
[Java] [Maven] Vorlage von pom.xml zum Registrieren der JAR-Datei eines Drittanbieters im lokalen Repository
Holen Sie sich EXIF-Informationen in Java
[Java] KClass in Java herunterladen [Kotlin]
JavaFX-Umgebungskonstruktion in Java 13
Ich möchte die MD5-Prüfsumme einer Datei in Java finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation erhalten.
Java-Implementierung von Tri-Tree
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Wurde im Basisjahr der Java-Kalenderwoche durchgeführt
Generieren und Ausführen der Jar-Datei der zum Paket gehörenden Java-Datei
Eine kurze Erklärung der fünf Arten von Java Static
Erhältlich am nächsten Werktag nach dem angegebenen Datum bei JAVA
Fügen Sie die Datei in die Eigenschaften eines Strings mit Spring XML-Konfiguration ein
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
Installieren Sie, indem Sie die Version von Django in der Docker-Umgebung angeben
Aktivieren Sie die Zelle A1 jeder Excel-Datei mit Java
Zählen Sie die Anzahl der Stellen nach dem Dezimalpunkt in Java
Ruft Attribute und Werte aus einer XML-Datei in Java ab