gpt4 book ai didi

java - 移至 Servlet 后程序无法正常工作

转载 作者:行者123 更新时间:2023-11-29 05:32:54 26 4
gpt4 key购买 nike

我已经制作了一个在 java 类中运行良好的程序..但是当我将我的代码移动到 servlet 时它并没有像预期的那样运行程序创建一些文件写入它们,然后再从中读取。问题是当我将代码移动到 servlet 时,程序首先不会创建文件,因此当稍后读取它们时,它会给出 FileNotFound 异常

这就是我创建写入和读取文件的方式。

首先,创建文件并写入...

Writer output = null;
File file = new File(i + ".txt");
output = new BufferedWriter(new FileWriter(file));
output.write(text);
output.close();

...然后从文件中读取

 File file = new File(i+".txt");
Scanner br = new Scanner(file);
// BufferedReader br = new BufferedReader(new FileReader(new File(TDM.class.getResource(i + ".txt").getPath())));
while (br.hasNextLine()) {
line = br.nextLine();

...

注意事项:*以上代码不在 servlet 中。servlet 仅调用包含此代码的方法。*显然,问题在于创建文件。由于某种原因,当从 servlet 调用该方法时,该文件未创建。当从另一个 java 类调用时,它如何完美地工作。

提前致谢

最佳答案

使用路径:File.createTempFile对于临时文件,或将相对于您的网络内容的网络路径(“/.../...”)转换为文件系统文件:

File file =
request.getServletContext().getRealPath("/WEB-INF/files/" + i + ".txt");
file.getParentFile().mkdirs();
...

更好的是给文件提供 URL,该文件将由 Servlet 将文件流式传输到

response.setContentType("text/plain");
response.getOutputStream();
...

如果您编写资源"file",它可能驻留在 .jar 的 .war 中;然后不要使用文件。使用 InputStream 读取它们:

InputStream in = getClass().getResource("/...").getResourceAsStream();

并将它们复制到 response.getOutputStream()。

也不要使用实用程序“速记”类 FileWriter,因为它使用平台编码,在 Windows 上是某种 ANSI 编码,在 Linux 服务器上通常是 UTF-8。

new BufferedWriter(new OutputStreamWriter
(new FileOutputStream(file), "UTF-8"));

关于java - 移至 Servlet 后程序无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20504462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com