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.
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();
}
}
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 ###");
}
}
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
Créez un fichier jar par maven install.
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 "?".
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