javaweb不能正常向文件中写入数据

public class ExcelUtil extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext sc = this.getServletContext();
System.out.print(sc.getRealPath("result.txt"));
writeFile(sc.getRealPath("result.txt"), "123");
}
public void writeFile(String writepath, String excelcontent) {
File file = new File(writepath);
FileWriter fw;
try {
fw = new FileWriter(file, true);
fw.write(excelcontent);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我把result.txt放到了WEB-INF下但是不能正常写入,不知道什么原因,可能是因为路径写错了吧,谢谢帮助啊。

(1)ServletContext sc = this.getServletContext();
这句话不知道你认为this指的是什么?一般的写法都是从request里取ServletContext而不是从Servlet里面取,感觉应该这样写才对:ServletContext sc = req.getServletContext();
(2)sc.getRealPath("result.txt"),首先要保证有这个文件,其次,如果你将其放在WEB-INF下面要写成sc.getRealPath("\WEB-INF\result.txt");你有两个错误点:1是没有加WEB-INF这层文件夹;2是没有在文件名的最开头加“\”;
(3)FileWrite里可以直接写文件路径字符串的,不需要先转换成File的。
(4)fw.close()不要放到try里,要放到finally里,否则万一try里出了错误无法继续执行,你的fw就关不掉了。
(5)如果你是用IDE开发的比如MyEclipse等,你要注意不要到你工程的WEB-INF下面的result.txt中去查看是否已经写入,而是要到你的Tomcat下WEB-INF的result.txt中去看。因为最终IDE都是把工程部署到Tomcat下面去运行的,自然result.txt这个文件也会被复制到tomcat那边去。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-27
出现问题的原因是,当前要写入的文件流没有被关闭,之后再次写入的时候就会出现这个无法写入的问题。举例:
通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储:
OutputStreamWriter pw = null;//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容
pw.close();//关闭流,如果此处不关闭,再次写入的时候就会报错
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,并且再次写入的时候就会报错无法写入,所以已有开发一定记得及时关闭不需要的流。