显示java io FileNotFoundException

显示java io FileNotFoundException

# 具体遇到的问题
显示java io FileNotFoundException, 老师帮我看看这是啥原因吧,我用附加的测试代码咋也不行。。。

​# 报错信息的截图

D:/Program%20Files%20(x86)/workspace/mgallery/build/classes/painting.xml

java.io.FileNotFoundException: D:\Program%20Files%20(x86)\workspace\mgallery\build\classes\painting.xml (系统找不到指定的路径。)

at java.io.FileOutputStream.open0(Native Method)

at java.io.FileOutputStream.open(Unknown Source)

at java.io.FileOutputStream.<init>(Unknown Source)

at java.io.FileOutputStream.<init>(Unknown Source)

at com.imooc.mgallery.utils.XmlDataSource.append(XmlDataSource.java:88)

at com.imooc.mgallery.utils.XmlDataSource.main(XmlDataSource.java:118)

/D:/Program%20Files%20(x86)/workspace/mgallery/build/classes/painting.xml


# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

package com.imooc.mgallery.utils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import com.imooc.mgallery.entity.Painting;

/**
* 数据源类,用于将XML文件解析为Java对象
* @author LENOVO
*
*/
public class XmlDataSource {
//通过static静态关键字保证数据全局唯一
private static List<Painting> data = new ArrayList();
private static String dataFile;
static {
//得到类路径文件下的painting.xml的地址
//c:\new style\painting.xml
//空格被转化为%20
dataFile = XmlDataSource.class.getResource("/painting.xml").getPath();
reload();
}
private static void reload() {
URLDecoder decoder = new URLDecoder();
try {
decoder.decode(dataFile,"UTF-8");
System.out.println(dataFile);
//利用dom4j对xml进行解析
SAXReader reader = new SAXReader();
//1.获取document文档对象
Document document = reader.read(dataFile);
//2.Xpath得到xml的节点集合
List<Node>nodes = document.selectNodes("/root/painting");
data.clear();
for(Node node:nodes) {
Element element = (Element)node;
String id = element.attributeValue("id");
String pname = element.elementText("pname");
Painting painting = new Painting();
painting.setId(Integer.parseInt(id));
painting.setPname(pname);

painting.setCategory(Integer.parseInt(element.elementText("category")));
painting.setPrice(Integer.parseInt(element.elementText("price")));
painting.setPreview(element.elementText("preview"));
painting.setDescription(element.elementText("description"));
data.add(painting);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取所有油画Painting对象
* @return Painting List
*/
public static List<Painting> getRawData(){
return data;
}
public static void append(Painting painting) {
//1.读取xml文档,得到document对象
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(dataFile);
//2.创建新的painting节点
Element root = document.getRootElement();//<root>
Element p = root.addElement("painting");
//3.创建painting节点的各个子节点
p.addAttribute("id", String.valueOf(data.size()+1));
p.addElement("pname").setText(painting.getPname());
p.addElement("category").setText(painting.getCategory().toString());
p.addElement("price").setText(painting.getPrice().toString());
p.addElement("preview").setText(painting.getPreview());
p.addElement("description").setText(painting.getDescription());
writer = new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");
document.write(writer);
// System.out.println(dataFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(writer!=null) {
try {
writer.close();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
reload();//重新加载,保证内存与文件的数据一致
}

}
public static void main(String[]args) {
//new XmlDataSource();
// List<Painting> ps = XmlDataSource.getRawData();
// System.out.println(ps);
Painting p =new Painting();
p.setPname("测试油画");
p.setCategory(1);
p.setPrice(4000);
p.setPreview("/upload/10.jpg");
p.setDescription("测试油画描述");
XmlDataSource.append(p);
}
}


正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好,1. 建议同学在代码中添加下方代码试一下

URLDecoder decoder = new URLDecoder();
dataFile= decoder.decode(dataFile,"UTF-8");

然后清除缓存。如下所示:

http://img1.sycdn.imooc.com//climg/5fb61d3809a43a8702400228.jpg

2. 如果还存在问题,则建议同学将项目放置到没有空格路径中试一下(如:直接放置到D盘)。

好帮手慕小尤 2020-11-15 19:12:26

同学你好,1. java.lang.NullPointerException空指针异常,使用null调用方法就会出现该异常。 建议同学查看XmlDataSource.java文件的第30行。并建议同学去除/painting.xml前的点(.)

2. 可能是同学路径中存在空格导致的,则建议同学在append()方法中调用decode()方法试一下。如下所示:

http://img1.sycdn.imooc.com//climg/5fb10d0f0975f0ab07120274.jpg

3. 如果还存在问题,则同学可尝试反馈项目结构,便于老师定位问题。

  • 老师我还是相同的问题,就是无法写入.xml上。我把项目的源代码导入试了试,就是无法在页面显示新增的内容。 报错信息: 普通输入项:pname:12 普通输入项:category:1 普通输入项:price:11 文件上传项:painting 上传文件目录:C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\mgallery1\upload 普通输入项:description:qqqq /C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/mgallery1/WEB-INF/classes/painting.xml java.io.FileNotFoundException: C:\Program%20Files\Apache%20Software%20Foundation\Tomcat%208.0\webapps\mgallery1\WEB-INF\classes\painting.xml (系统找不到指定的路径。) /C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/mgallery1/WEB-INF/classes/painting.xml at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(Unknown Source) at java.io.FileOutputStream.<init>(Unknown Source) at java.io.FileOutputStream.<init>(Unknown Source) at com.imooc.mgallery1.utils.XmlDataSource.append(XmlDataSource.java:101) at com.imooc.mgallery1.dao.PaintingDao.create(PaintingDao.java:50) at com.imooc.mgallery1.service.PaintingService.create(PaintingService.java:35) at com.imooc.mgallery1.controller.ManagementController.create(ManagementController.java:141) at com.imooc.mgallery1.controller.ManagementController.doGet(ManagementController.java:57) at com.imooc.mgallery1.controller.ManagementController.doPost(ManagementController.java:70)
    2020-11-19 13:52:44
  • 按照报错信息定位到的是XmlDataSource的这一行(100,101)代码: //4.写入XML,完成追加操作 writer=new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");
    2020-11-19 13:53:00
  • 就是不知道为啥会写不进去xml文件。。。
    2020-11-19 13:55:27
好帮手慕小尤 2020-11-15 15:58:30

同学你好,1. 建议同学在D:\Program%20Files%20(x86)\workspace\mgallery\build\classes\目录中查看是否存在painting.xml 文件,如果不存在则建议同学清除缓存,重新试一下。

2. 如果还存在问题,则建议同学将/修改为./,从当前目录中查找。如下图所示:

http://img1.sycdn.imooc.com//climg/5fb0dedc09c4d4c607800184.jpg

  • 目录中有这个文件,改了./之后但是还是报错啊。。。 Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: java.lang.NullPointerException at com.imooc.mgallery.utils.XmlDataSource.<clinit>(XmlDataSource.java:30)
    2020-11-15 16:13:29
好帮手慕小尤 2020-11-15 14:27:58

同学你好,1. java.io.FileNotFoundException异常,一般会出现“拒绝访问”和“系统找不到指定路径”两种报错。

2. 同学的问题是在系统中未找不到painting.xml 文件。则建议同学创建painting.xml 文件,然后清除缓存,最后重新运行项目。

http://img1.sycdn.imooc.com//climg/5fb0ca250959babc03660280.jpg

http://img1.sycdn.imooc.com//climg/5fb0ca6409c1886902400228.jpg

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师