java.io.FileNotFoundException:文件名、目录名或卷标语法不正确
哎呀,现在可真是双重心情呀,真的是既兴奋又悲叹呀!兴奋地是这个"文件不存在的"的bug终于解决了,悲剧的是解决它浪费了我好长时间。以后碰到bug就得记录下来,可以作为经验之谈了,避免以后再犯类似的错误。
我的错误是调用用poi生成excel文件的方法后,死活就是给我报java.io.FileNotFoundException: D:\ProgramTools\apache-tomcat-6.0.26\webapps\BAW-phaseM\excel\ttakeinventory\2011-10-30_2011-11-26 23:59:59_YS_no_checked_.xls (文件名、目录名或卷标语法不正确。) 的错误。我前思后想,来回跟踪,都没有问题,就是到写入excel文件的时候,愣是写不进去。没办法了,只好请教了一下同事,他看到这个错误后就给我说是因为excel命名的问题,windows下的文件名不允许出现23:59:59类似这样的字符的。后来经验证,果然是这样,我就重新修改了一下名字,这份excel就顺利的诞生啦!哈哈。。真是太高兴啦!
Windows 中文件夹命名规则是:
① 文件名或文件夹名可以由1~256个西文字符或128个汉字(包括空格)组成,不能多于256个字符。
② 文件名可以有扩展名,也可以没有。有些情况下系统会为文件自动添加扩展名。一般情况下,文件名与扩展名中间用符号“.”分隔。
③ 文件名和文件夹名可以由字母、数字、汉字或~、!、@、#、$、%、^、&、( )、_、-、{}、’等组合而成。
④ 可以有空格,可以有多于一个的圆点。
⑤ 文件名或文件夹名中不能出现以下字符:\、/、:、*、?、"、<、>、| 。
⑥ 不区分英文字母大小写。
还有一种java.io.FileNotFoundException的错误,这种错误其实也是因为在这个路径中不存在这个jsp的编译文件。这个错误是我在发布程序到生产机上之后遇到的,原来是因为没有给这个jsp编译,最高效的解决办法是把本地生成的这个jsp的.java和.class文件copy到编译的文件的路径下面。如果是多个jsp文件都是没有编译的话,那就关闭tomcat,清楚缓存,就是把/usr/local/tomcat/work/Catalina的Catalina文件删除,重启就好了。
java.io.FileNotFoundException: /usr/local/tomcat/work/Catalina/localhost/User/org/apache/jsp/caiwushenhe_005fpicking_jsp.java (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:141)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:296)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:399)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)