两个错误如下:
1.
InputStream is4 = Dom4JDemo01.class.getResourceAsStream("itheimaJob/src/com/ayo666/__0108day14XML工廠裝飾模式編碼/src/books.xml");
org.dom4j.DocumentException: Cannot invoke "String.length()" because "spec" is null
解决办法:去掉工程文件夹名,com才是它的根目录。支持无目录简写,如果不写斜杠默认在包内同级找,写一个斜杠表示在根目录src级找。
2.
InputStream is1 = new FileInputStream("itheimaJob/src/com/ayo666/__0108day14XML工廠裝飾模式編碼/src/books.xml");
java.io.FileNotFoundException:itheimaJob/src/com/ayo666/__0108day14XML工廠裝飾模式編碼/src/books.xml (系统找不到指定的路径。)
解决办法:去掉工程文件夹名,src才是它的根目录。不支持无目录简写。"\\"等同于"/"。
另外以上都做对了还是报错怎么办!今天真的碰到了这种问题,不要怀疑自己,是IDEA的问题,Rebuild Project就欧了!这个功能在编译器的build工具栏里。有啥疑难杂症、未解之谜都请先rebuild一下吧!~
以下都是正确的路径,不用工程文件夹名就好了。
public class Dom4JDemo01 {
@Test
public void parse() throws Exception {
// 1、创建一个dom4j的解析器对象:代表了整个dom4j框架。
SAXReader saxReader = new SAXReader();
// 2、加载xml文件成为字节输入流
InputStream is1 = new FileInputStream("src/com/ayo666/__0108day14XML工廠裝飾模式編碼/src/books.xml");
InputStream is2 = new FileInputStream("src/com/ayo666/__0108day14XML工廠裝飾模式編碼/src/books.xml");//呢個路徑又是從src開始,
InputStream is3 = new FileInputStream("src\\com\\ayo666\\__0108day14XML工廠裝飾模式編碼\\src\\books.xml");//試下雙斜杠,效果一樣嘅,另外偏左係正斜杠咩。
// 用于加载文件成为一个字节输入流返回,直接去src下寻找,但是必须带:/
InputStream is4 = Dom4JDemo01.class.getResourceAsStream("/books.xml");//呢度填idea複製.xml嘅相對路徑都無用哦。呢度係從主src裡面取
InputStream is5 = Dom4JDemo01.class.getResourceAsStream("/com/ayo666/__0108day14XML工廠裝飾模式編碼/src/books.xml");//成功咗,呢到嘅相對路徑不是itheima,也不是src,而是由com開始,可能因爲是.class比較特殊。
InputStream is6 = Dom4JDemo01.class.getResourceAsStream("books.xml");//點解和.java放一個包裡面唔可以像src個樣搜索到。唔通佢只可以放src裡面。睇來唔得。等等,總結下
InputStream is7 = Dom4JDemo01.class.getResourceAsStream("/com/ayo666/__0108day14XML工廠裝飾模式編碼/src/old/books.xml");
//rebuild project就得啦,並非路徑問題。但係呢個真係要從com開始哦
// 3、把字节输入流解析成文档对象
Document document = saxReader.read(is7);
// 4、获取根元素对象
Element root = document.getRootElement();
System.out.println(root.getName());
}
01091234補充,神奇的事情發生了
InputStream is = new FileInputStream("/books.xml"); //報錯,这个类不能简写路径 OutputStream is0 = new FileOutputStream("books.xml"); //真係outstream就可以簡寫,input唔得,it doesn't make a sense.
input和output居然待遇唔通嘅