내 프로젝트의 구조는 다음과 같습니다.
/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
}
노트
답변
시험:
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()));