当前位置: 代码迷 >> Java Web开发 >> Servlet里报文件读取错误!
  详细解决方案

Servlet里报文件读取错误!

热度:4699   发布时间:2013-02-25 21:10:21.0
Servlet里报文件读取异常!~
现在有一个文件ccc.data,在一个类里用一个实例方法负责读取,方法返回一个String类型的值,在Servlet里调用这个方法。并把它输出。但是却报文件读取异常:
java.io.FileNotFoundException: E:\Information\Tomcat6.0\bin\tdy218\threeDES\key_
Operate\key\key.txt (系统找不到指定的路径。)
真实文件确实不在上面这个目录下放着。
然后我又在放Servlet的地方写个一个方法(main()方法),调用读取文件的方法。却可以读取出来。
先是相对路径不行,然后把相对路径转换成绝对路径也不行,我就发现,new File("").getAbsolutePath();有问题,在应用程序里还正常,一到web应用中就不行了。然后想用getServletContext().getRealPath(),然后看看要写的地方也抛弃了,我想在一个非Servlet的.java文件里用,需要继承HttpServlet类,换需要HttpServletRequest和HttpServletResponse对象。
真是无语了,大家帮忙看看。为了验证我有写了一个Servlet,只不过没有doGet()、doPost()方法罢了。
ccc.data的存放位置(绝对路径):
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\key_Operate\key\ccc.data
生成的读取这个ccc.data文件的方法字节码文件的位置:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\key_Operate\Text_Read.class
生成的Servlet字节码文件的存放位置:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\tdy218\threeDES\MVC\Test_Servlet.class
源文件都在这里放着:
E:\Information\Tomcat6.0\webapps\ajax-register\WEB-INF\classes\


总结:使用相对路径不行,然后又换作转化绝对路径也不行。
private final String keyFile = "tdy218/threeDES/key_Operate/key/key.data";
new File("").getAbsolutePath()+....;
大家帮忙看看.

------解决方案--------------------------------------------------------
在ajax-register目录下建一个文件夹data,然后将ccc.data 文件放在data文件夹下。
然后:
Java code
String path = getServletContext().getRealPath("/data");String separator = System.getProperty("file.separator");String filePath = path + separator + "ccc.data";File file = new File(filePath);
------解决方案--------------------------------------------------------
对不起,写错了^_^
Java code
response.setContentType("text/html;charset=gbk");       PrintWriter  show = response.getWriter();       String path = getServletContext().getRealPath("/data");       String separator = System.getProperty("file.separator");       String filePath = path + separator + "ccc.data";       show.println(new Text_Read().read(filePath));
------解决方案--------------------------------------------------------
getRealPath()取得的是站顶目录位置
要取得具体位置需要这样getRealPath("/你的文件相对位置")
  相关解决方案