繁体   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