簡體   English   中英

無法從 Tomcat 服務器訪問 Java 資源文件夾中的文件

[英]Can't access file in Java resources folder from Tomcat server

我正在努力讓我的簡單 Tomcat 應用程序正常工作。

我有 csv 文件放在 src/main/resources/cities.csv

在我的測試主要方法中,一切順利。 但是,當我使用 servlet 中的方法引用它時,我得到:java.nio.file.NoSuchFileException

文件操作:

public class FileOparations {

static private final Path path = Paths.get("src/main/resources/cities.csv");

public static List<City> getCitiesList() {
    return getCitiesStream().collect(Collectors.toList());
}

public static Stream<City> getCitiesStream() {
    try {
        return Files.readAllLines(path)
                .stream()
                .skip(1)
                .map((String line) -> {
                    return line.split("\",\"");
                })
                .map((String[] line) -> {

                    String[] newData = new String[line.length];
                    for (int i = 0; i < line.length; i++) {
                        newData[i] = line[i].replaceAll("\"", "");
                    }
                    return newData;
                })
                .map((String[] data) -> {
                    String name = data[0];
                    String nameAscii = data[1];
                    String gps = data[2] + ":" + data[3];
                    String country = data[4];
                    String adminName = data[7];
                    String capitol = data[8];
                    long population;
                    try {
                        population = Long.parseLong(data[9]);
                    } catch (NumberFormatException e) {
                        population = Integer.MIN_VALUE;
                    }
                    int id = Integer.parseInt(data[10]);
                    return new City(name, nameAscii, id, country, gps, capitol, population, adminName);
                });
    } catch (IOException e) {
        e.printStackTrace();
    }
    return Stream.empty();
}

我在 servlet 中的代碼如下所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response){

    List<City> cities = FileOparations.getCitiesList();
    request.setAttribute("cities", cities);
    request.getRequestDispatcher("result.jsp").forward(request, response);
}

我很驚訝,因為我沒有通過 servlet 傳遞任何 URL,我想從 Java 調用 static 方法。方法 getCitiesList 調用 stream,映射並返回准備使用列表。

嘗試使用getServletContext()

String relativePath = "/resources/cities.csv";
InputStream input = getServletContext().getResourceAsStream(relativeWebPath);

相對路徑將是目錄的路徑,從您的 tomcat 中的 WAR 文件展開。因此在構建之前,它應該在 src/main/webapp/

暫無
暫無

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

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