java.io.FileNotFoundException(系统找不到指定的路径。)

时间:2022-12-11 08:34:37
我在用dom4j写xml,," .\data\mm.xml "这个是我的相对路径,用的是myeclips开发的,服务器用的是外置的tomcat,但我发现这个相对路径写xml的时候是写到部署到tomcat的那个文件夹中的,比如我的相对路径是“mm.xml”的话,可以写的,是直接写到“C:\apache-tomcat-7.0.37\bin”这个文件夹下面的。我想知道这个是什么原因?
java.io.FileNotFoundException: .\data\mm.xml (系统找不到指定的路径。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
at java.io.FileOutputStream.<init>(FileOutputStream.java:104)
at adub.dynamicvisualization.EasyEcharts.writeEchartData(EasyEcharts.java:310)
at adub.dynamicvisualization.controller.DEcharts_bar1.doGet(DEcharts_bar1.java:49)
at adub.dynamicvisualization.controller.DEcharts_bar1.doPost(DEcharts_bar1.java:57)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

11 个解决方案

#1


在servlet中调用写XML的方法就会产生这样的错误,如果是自己写个测试的main方法是不会有错的,这个是为什么?

#2


以下代码获得的是我这个工程在外置的tomcat上的路径:
String filePath=this.getServletConfig().getServletContext().getRealPath("/");
但是,我发现写到外置tomcat上的项目的文件夹中并不能同时在myeclipes中同时显示,只有写到myeclipes安装目录对应的这个工程名的文件下才可以同时显示。

#3


我用绝对路径去写到位于myeclipes安装目录对应的这个工程名的文件下的时候,测试的结果是,外置的tomcat对应的工程名下也产生了对应的xml.就可以了。
 writerxml = new XMLWriter(new FileOutputStream("C:\\Users\\Administrator\\Workspaces\\MyEclipse 10\\EChartDynamic\\WebRoot\\data\\"+dataSourceSrc),format);

#4


项目发布所有需要的文件都会copy到tomcat目录下
像这种路径“ .\data\mm.xml ”实际运行都是读取的tomcat下的路径

#5


嗯,这个我明白,这里有2个概念,一个是myeclipes的安装路径下面的工程名,还有一个是外置tomcat的webapp下面的工程名,我在servlet中用dom4j去写xml的时候,相对路径不能用,这个就不明白了?是我哪里没配置?

#6


 .\data\mm.xml  这个是从当前servlet目录下的data\mm.xml  建议使用\data\mm.xml 读取跟目录下的data\mm.xml
应该把“.”去掉就可以了

#7


还是不行。我的sevlet是DEcharts_bar1.java这个文件,想写到Webroot下面的data文件夹下
java.io.FileNotFoundException(系统找不到指定的路径。)

#8


你好像现在data目录下还没有文件啊???

#9


你应该先判断,如果没有就创建一个mm.xml这个文件,没有文件肯定会报文件找不到异常

#10


不对啊,我直接在main方法中用dom4j去写xml的时候是可以的。自动生成这个.xml的文件的。

#11


刚好也遇到了个这个问题,不过这个时间过去也太久了。还是把我遇到的情况写下来吧,方便后人。
我把tomcat安装在"D:/program file/"文件夹下了,没错,这个文件夹中含有一个空格,FileOutputStream生成对象的时候,路径中的空格会被编码转换成%20,这个时候问题就来了,系统就会报错,找不到指定文件。
(ps:路径中存在中文和特殊字符也会引起这个问题。)


在别处找到了解决方案,连接在这里 http://www.360doc.com/content/11/1009/17/4602013_154657565.shtml

解决办法就是解码
我用了方法2 : URLDecoder.decode(path,"UTF-8");

#1


在servlet中调用写XML的方法就会产生这样的错误,如果是自己写个测试的main方法是不会有错的,这个是为什么?

#2


以下代码获得的是我这个工程在外置的tomcat上的路径:
String filePath=this.getServletConfig().getServletContext().getRealPath("/");
但是,我发现写到外置tomcat上的项目的文件夹中并不能同时在myeclipes中同时显示,只有写到myeclipes安装目录对应的这个工程名的文件下才可以同时显示。

#3


我用绝对路径去写到位于myeclipes安装目录对应的这个工程名的文件下的时候,测试的结果是,外置的tomcat对应的工程名下也产生了对应的xml.就可以了。
 writerxml = new XMLWriter(new FileOutputStream("C:\\Users\\Administrator\\Workspaces\\MyEclipse 10\\EChartDynamic\\WebRoot\\data\\"+dataSourceSrc),format);

#4


项目发布所有需要的文件都会copy到tomcat目录下
像这种路径“ .\data\mm.xml ”实际运行都是读取的tomcat下的路径

#5


嗯,这个我明白,这里有2个概念,一个是myeclipes的安装路径下面的工程名,还有一个是外置tomcat的webapp下面的工程名,我在servlet中用dom4j去写xml的时候,相对路径不能用,这个就不明白了?是我哪里没配置?

#6


 .\data\mm.xml  这个是从当前servlet目录下的data\mm.xml  建议使用\data\mm.xml 读取跟目录下的data\mm.xml
应该把“.”去掉就可以了

#7


还是不行。我的sevlet是DEcharts_bar1.java这个文件,想写到Webroot下面的data文件夹下
java.io.FileNotFoundException(系统找不到指定的路径。)

#8


你好像现在data目录下还没有文件啊???

#9


你应该先判断,如果没有就创建一个mm.xml这个文件,没有文件肯定会报文件找不到异常

#10


不对啊,我直接在main方法中用dom4j去写xml的时候是可以的。自动生成这个.xml的文件的。

#11


刚好也遇到了个这个问题,不过这个时间过去也太久了。还是把我遇到的情况写下来吧,方便后人。
我把tomcat安装在"D:/program file/"文件夹下了,没错,这个文件夹中含有一个空格,FileOutputStream生成对象的时候,路径中的空格会被编码转换成%20,这个时候问题就来了,系统就会报错,找不到指定文件。
(ps:路径中存在中文和特殊字符也会引起这个问题。)


在别处找到了解决方案,连接在这里 http://www.360doc.com/content/11/1009/17/4602013_154657565.shtml

解决办法就是解码
我用了方法2 : URLDecoder.decode(path,"UTF-8");