[java] 리소스 폴더에서 파일을 어떻게로드합니까?

내 프로젝트의 구조는 다음과 같습니다.

/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/

난에 파일이 /src/test/resources/test.csv난에 단위 테스트에서 파일을로드 할/src/test/java/MyTest.java

작동하지 않는이 코드가 있습니다. “이러한 파일이나 디렉토리가 없습니다”라는 메시지가 표시됩니다.

BufferedReader br = new BufferedReader (new FileReader(test.csv))

나는 또한 이것을 시도했다

InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))

이것은 또한 작동하지 않습니다. 를 반환합니다 null. Maven을 사용하여 프로젝트를 빌드하고 있습니다.



답변

다음을 시도하십시오.

ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream is = classloader.getResourceAsStream("test.csv");

위의 방법으로 문제가 해결되지 않으면 다양한 프로젝트가 다음 클래스에 추가되었습니다 : 1 (code here ). 2ClassLoaderUtil

해당 클래스를 사용하는 방법에 대한 몇 가지 예는 다음과 같습니다.

src \ main \ java \ com \ company \ test \ YourCallingClass.java
src \ main \ java \ com \ opensymphony \ xwork2 \ util \ ClassLoaderUtil.java
src \ main \ resources \ test.csv
// java.net.URL
URL url = ClassLoaderUtil.getResource("test.csv", YourCallingClass.class);
Path path = Paths.get(url.toURI());
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
// java.io.InputStream
InputStream inputStream = ClassLoaderUtil.getResourceAsStream("test.csv", YourCallingClass.class);
InputStreamReader streamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(streamReader);
for (String line; (line = reader.readLine()) != null;) {
    // Process line
}

노트

  1. Wayback Machine 에서 참조하십시오 .
  2. 또한 GitHub에서 .

답변

시험:

InputStream is = MyTest.class.getResourceAsStream("/test.csv");

IIRC getResourceAsStream()는 기본적으로 클래스 패키지와 관련이 있습니다.

@Terran이 지적했듯이 /파일 이름의 시작 부분에 를 추가하는 것을 잊지 마십시오


답변

다음은 Guava를 사용하는 빠른 솔루션입니다 .

import com.google.common.base.Charsets;
import com.google.common.io.Resources;

public String readResource(final String fileName, Charset charset) throws IOException {
        return Resources.toString(Resources.getResource(fileName), charset);
}

용법:

String fixture = this.readResource("filename.txt", Charsets.UTF_8)


답변

Spring 프로젝트에서 흐름 코드를 사용해보십시오

ClassPathResource resource = new ClassPathResource("fileName");
InputStream inputStream = resource.getInputStream();

또는 비 봄 프로젝트

 ClassLoader classLoader = getClass().getClassLoader();
 File file = new File(classLoader.getResource("fileName").getFile());
 InputStream inputStream = new FileInputStream(file);


답변

비 스프링 프로젝트 :

String filePath = Objects.requireNonNull(MyClass.class.getClassLoader().getResource("any.json")).getPath();

Stream<String> lines = Files.lines(Paths.get(filePath));

봄 프로젝트의 경우 한 줄 코드를 사용하여 resources 폴더 아래의 파일을 가져올 수도 있습니다.

File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "any.json");

String content = new String(Files.readAllBytes(file.toPath()));


답변

이제 maven created resources 디렉토리에서 글꼴을 읽는 소스 코드를 보여 드리겠습니다.

scr / main / resources / calibril.ttf

여기에 이미지 설명을 입력하십시오

Font getCalibriLightFont(int fontSize){
    Font font = null;
    try{
        URL fontURL = OneMethod.class.getResource("/calibril.ttf");
        InputStream fontStream = fontURL.openStream();
        font = new Font(Font.createFont(Font.TRUETYPE_FONT, fontStream).getFamily(), Font.PLAIN, fontSize);
        fontStream.close();
    }catch(IOException | FontFormatException ief){
        font = new Font("Arial", Font.PLAIN, fontSize);
        ief.printStackTrace();
    }   
    return font;
}

그것은 나를 위해 일했고 전체 소스 코드가 당신을 도울 수 있기를 바랍니다. 즐기십시오!


답변

1.7 이후의 Java

 List<String> lines = Files.readAllLines(Paths.get(getClass().getResource("test.csv").toURI()));