从 /src/main/resources/ 读取文件

8

我正在尝试开发一个网络应用程序并遇到了问题:

我不知道如何使用Java打开保存在资源文件夹中的文本文件:

text file saved in the resource folder

 String relativeWebPath ="/src/main/resources/words.txt";  //Import der des Textdoumentes
 String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
 File f = new File(absoluteDiskPath);

(文件words.txt)

如您所见,我正在尝试访问words.txt文件,但无法使用。有什么想法吗?


1
/src/main/resources/ 虽然存在于您的项目目录结构中,但可能不是 Web 路径的一部分。 - William Price
谢谢你的回答。/src/main/resources/无法工作。我应该如何更改目录结构? - Träumerei
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10

试一试。

InputStream is = getClass().getClassLoader()
                         .getResourceAsStream("/words.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(is));

1
Thread.currentThread().getContextClassLoader() 可能是更好的选择,如此处所述:https://dev59.com/XnA75IYBdhLWcg3wrrNS - Baderous
谢谢您的回答,但这对我没有用。仍然找不到文件。 - Träumerei
2
去掉“/”,只留下以下代码:ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream is = classLoader.getResourceAsStream("words.txt"); - Baderous

1

为了最佳实践并避免这些问题,将文本文件 (words.txt) 放置在 WEB_INF 文件夹中(这是资源的安全文件夹)。然后:

ServletContext context = getContext();
InputStream resourceContent = context.getResourceAsStream("/WEB-INF/words.txt");

参考资料:https://dev59.com/tW855IYBdhLWcg3wcz1h#4342095


谢谢你的回答。不幸的是,你的答案对我没用。 - Träumerei
@dovy,在这种情况下,由于目录问题,您必须维护两个不同的代码(Java独立版,Web版)。我认为这不是一个好主意。 - SUNDONG
如果文件在单独的 .jar 包的 src/main/resources 文件夹中,该怎么办?没有办法将其移动到 webapp 模块的 WEB_INF 文件夹中... - beluchin

0
使用此代码查找您想要打开的文件路径。
import java.net.URL;

[...]

URL url = this.getClass().getResource("/words.txt");
String absoluteDiskPath = url.getPath();

0
如果你想在其他类中访问,比如你有一个工具包,在其中有一个名为ReadFileUtil.java的类用于打开和读取文件,你可以按照以下方式操作:
public class ReadFileUtil {

        URL url = ReadFileUtil.class.getResource("/"+yourFileName);
        File file = new File(url.getPath());

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,