簡體   English   中英

src / main / resources中的FileNotFoundException

[英]FileNotFoundException in src/main/resources

我在src / main / resources下的maven項目中放置了一個文件,文件名只是temp.txt。

當我嘗試打開文件時:

BufferedReader br = new BufferedReader(new FileReader(new File("./temp.txt")));

我收到一個錯誤:

Exception in thread "main" java.io.FileNotFoundException: \temp.txt

src / main / resources下的所有文件都放在maven下的classpath的根文件夾中。 那么為什么程序無法在這里找到文件呢?

如果您要將文件打包在類路徑中,那么請從類路徑中讀取它。

Maven結構

src
   main
       resources
               file.txt

構建之后,文件將放置在類路徑的根目錄中。 所以使用

InputStream is = getClass().getResourceAsStream("/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));

file.txt前面的/將帶你到這個類所在的任何包的根目錄。


UPDATE

測試示例

package com.underdogdevs.stackoverflow;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class TestResourceFile {

    public static void main(String[] args) throws IOException {
        InputStream is = TestResourceFile.class.getResourceAsStream("/test.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }
}

在此輸入圖像描述

在此輸入圖像描述

把它作為你的道路:

BufferedReader br = new BufferedReader(new FileReader(new 
File("src/main/resources/temp.txt")));

在Jenkins中設置集成測試時遇到此問題。
該問題是由名稱中包含空格的文件夾中的作業引起的。 因此,Jenkins沒有一個名為foo bar的工作區文件夾,而是使用FileNotFoundException創建了foo%20bar並且所有測試都失敗了。

解決方案只是重命名您的文件夾,因此它沒有任何空格。

Maven將/src/main/resouces/下的文件放入類路徑的默認包中。 因此,您可以通過類加載器加載:

InputStream in = getClass().getResourcesAsStream("temp.txt")

有關更多信息,請參閱Class#getResoucesAsStream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM