리소스의 텍스트 파일을 문자열로 읽는 데 도움이되는 유틸리티가 있습니까? 나는 이것이 대중적인 요구 사항이라고 생각하지만 인터넷 검색 후 유틸리티를 찾을 수 없습니다.
답변
예, 구아바 는 Resources
수업 시간에 이것을 제공합니다 . 예를 들면 다음과 같습니다.
URL url = Resources.getResource("foo.txt");
String text = Resources.toString(url, StandardCharsets.UTF_8);
답변
구아바와 같은 추가 종속성없이 이전 Stupid Scanner 트릭 oneliner를 사용할 수 있습니다 .
String text = new Scanner(AppropriateClass.class.getResourceAsStream("foo.txt"), "UTF-8").useDelimiter("\\A").next();
여러분, 정말로 필요하지 않은 한 타사 제품을 사용하지 마십시오. JDK에는 이미 많은 기능이 있습니다.
답변
자바 7의 경우 :
new String(Files.readAllBytes(Paths.get(getClass().getResource("foo.txt").toURI())));
답변
순수하고 단순하며 항아리 친화적 인 Java 8+ 솔루션
아래의 간단한 방법은 Java 8 이상을 사용하는 경우 잘 작동합니다.
/**
* Reads given resource file as a string.
*
* @param fileName path to the resource file
* @return the file's contents
* @throws IOException if read fails for any reason
*/
static String getResourceFileAsString(String fileName) throws IOException {
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
try (InputStream is = classLoader.getResourceAsStream(fileName)) {
if (is == null) return null;
try (InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr)) {
return reader.lines().collect(Collectors.joining(System.lineSeparator()));
}
}
}
또한 jar 파일의 리소스와 함께 작동합니다 .
텍스트 인코딩 정보 : InputStreamReader
지정하지 않은 경우 기본 시스템 문자 세트를 사용합니다. 다음과 같이 디코딩 문제를 피하기 위해 직접 지정할 수 있습니다.
new InputStreamReader(isr, StandardCharsets.UTF_8);
불필요한 의존성을 피하십시오
항상 크고 뚱뚱한 라이브러리에 의존하지 않는 것이 좋습니다. 다른 작업에 이미 Guava 또는 Apache Commons IO를 사용하지 않는 한 파일에서 읽을 수 있도록 해당 라이브러리를 프로젝트에 추가하는 것은 너무 많은 것 같습니다.
“간단한”방법? 농담 해
나는 순수한 Java가 이와 같은 간단한 작업을 수행 할 때 잘 작동하지 않는다는 것을 이해합니다. 예를 들어, Node.js의 파일에서 읽는 방법은 다음과 같습니다.
const fs = require("fs");
const contents = fs.readFileSync("some-file.txt", "utf-8");
간단하고 읽기 쉽다 (사람들은 여전히 대부분의 무지 때문에 많은 의존성에 의존하기를 좋아하지만). 또는 파이썬에서 :
with open('some-file.txt', 'r') as f:
content = f.read()
슬프지만 Java 표준에서는 여전히 간단하며 위의 방법을 프로젝트에 복사하여 사용하기 만하면됩니다. 나는 거기에서 무슨 일이 일어나고 있는지 이해하지 않아도됩니다. 왜냐하면 그것은 누구에게나 중요하지 않기 때문입니다. 그냥 작동합니다. 기간
답변
구아바 에는 파일을 문자열로 읽는 “toString”메소드가 있습니다.
import com.google.common.base.Charsets;
import com.google.common.io.Files;
String content = Files.toString(new File("/home/x1/text.log"), Charsets.UTF_8);
이 방법은 파일이 클래스 경로에 있어야 할 필요는 없습니다 ( Jon Skeet 이전 답변 에서와 같이 ).
답변
yegor256 은 Apache Commons IO를 사용하여 훌륭한 솔루션을 찾았습니다 .
import org.apache.commons.io.IOUtils;
String text = IOUtils.toString(this.getClass().getResourceAsStream("foo.xml"),
"UTF-8");
답변
apache-commons-io 의 유틸리티 이름은 FileUtils
다음과 같습니다.
URL url = Resources.getResource("myFile.txt");
File myFile = new File(url.toURI());
String content = FileUtils.readFileToString(myFile, "UTF-8"); // or any other encoding