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.
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();
}
}
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 ###");
}
}
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
Erstellen Sie ein Glas von maven install.
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.
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