我已经创建了一个在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中调用包含此代码的方法。 *显然,PROBLEM用于创建文件..由于某种原因,从servlet调用方法时不会创建文件。从另一个java类调用时,它是如何工作的。
提前致谢
答案 0 :(得分:2)
对临时文件使用路径:File.createTempFile,或将相对于Web内容的Web路径(“/ ... / ...”)转换为文件系统文件:
File file =
request.getServletContext().getRealPath("/WEB-INF/files/" + i + ".txt");
file.getParentFile().mkdirs();
...
更好的是将URL提供给文件,该文件将由将文件流式传输到
的Servlet提供response.setContentType("text/plain");
response.getOutputStream();
...
如果您编写可能位于.jar的.war中的资源“文件”;然后不要使用File。 使用InputStream读取它们:
InputStream in = getClass().getResource("/...").getResourceAsStream();
将它们复制到response.getOutputStream()。
也不要使用实用程序“short-hand”类FileWriter,因为它使用平台编码,在Windows上是一些ANSI编码,在Linux服务器上通常是UTF-8。
new BufferedWriter(new OutputStreamWriter
(new FileOutputStream(file), "UTF-8"));
答案 1 :(得分:1)
“Elliott Frisch”的评论解决了我的问题
“您需要指定文件的路径。”
我只需要提供“绝对”路径而不是相对路径 所以,代码应该是这样的
Writer output = null;
File file = new File("/file/path/"i + ".txt");
output = new BufferedWriter(new FileWriter(file));
output.write(text);
output.close();
和
File file = new File("/file/path/"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();
然后当我遇到此异常java.lang.NoClassDefFoundError: org/jsoup/Jsoup
时,我只需从互联网上下载jsoup库并将其添加到我的项目(库文件夹)下。
非常感谢你们所有人:)