[java] 리소스 텍스트 파일을 문자열로 읽는 유틸리티 (Java) [닫기]

리소스의 텍스트 파일을 문자열로 읽는 데 도움이되는 유틸리티가 있습니까? 나는 이것이 대중적인 요구 사항이라고 생각하지만 인터넷 검색 후 유틸리티를 찾을 수 없습니다.



답변

예, 구아바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 이전 답변 에서와 같이 ).


답변

yegor256Apache 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