日期:2014-05-17  浏览次数:20573 次

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("/你的文件相对位置")