移动到Servlet时,程序无法正常工作

时间:2013-12-10 20:24:05

标签: java file servlets

我已经创建了一个在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类调用时,它是如何工作的。

提前致谢

2 个答案:

答案 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库并将其添加到我的项目(库文件夹)下。

非常感谢你们所有人:)