今天小出來為大家解答以上問題。filenotfoundexception怎么解決,filenotfoundexception怎么解決很多人還不知道,現在讓我們一起來看看吧!
1、使用newFile()的問題
2、是File.io包下的基類,代表硬盤上的一個文件或目錄。我們可以用絕對路徑或相對路徑來構造它。
3、工程硬盤和eclipse的目錄結構如下:
4、在eclipse中運行上述程序,發現兩種方法都能正確讀取文件,并且不會拋出FileNotFoundException。
5、使用絕對路徑,雖然定位清晰,但不靈活。比如把上面的項目放在D盤下,就必須修改絕對路徑,顯然不方便。使用相對路徑與項目所在的硬盤路徑無關。如果直接導入到eclipse中運行,可以正確讀取文件內容。而現實情況是很多時候我們不知道文件的絕對路徑,根據部署環境的不同會有所不同。比如把準備好的war放到tomcat或者jboss容器中運行,很明顯絕對路徑不一樣,我們的代碼事先并不知道。
6、使用相對路徑怎么樣?可惜也有很多問題。是file.io包的基礎類,java.io包中的類總是根據當前用戶目錄分析相對路徑名。也就是說,以下兩種方式是等價的,
7、也就是說,相對路徑是否起作用取決于user.r的值.系統屬性user.dir是在JVM啟動時設置的,通常是java虛擬機的調用目錄,也就是執行Java命令的目錄。
8、對于tomcat/jboss容器,user.dir是%home/bin%/目錄,因為這個目錄是我們啟動web容器的地方。也就是說user.dir也是可變的,不是固定的。顯然,使用這種方法和絕對路徑沒有本質區別,不推薦使用。順便說一下,當我們在eclipse中運行程序時,eclipse會將user.dir的值設置為項目的根目錄。在我們的示例中,user.dir是c:/workspace/path_project/
9、可以得出結論,用java.io.File讀取文件,不管是相對路徑還是絕對路徑,都不是一個好的做法,能不用就不要用。
10、使用Class.getResource()或ClassLoader.getResource()
11、這兩個方法用于讀取jar包中或類路徑下的資源文件。以下方法可以正確定位文件。
12、Class.getResource()有兩種方式,絕對路徑和相對路徑。絕對路徑以/開頭,搜索從類路徑或jar包根目錄開始;
13、相對路徑是相對于當前類所在的目錄.或者。被允許定位文件。ClassLoader.getResource()只能使用絕對路徑,不一定要以/開頭。
14、推薦兩種讀取資源文件的方法,它們不依賴于user.r或特定的部署環境。
15、使用Class或ClassLoader.getResource()的相對路徑和絕對路徑問題
16、建議使用相對路徑或絕對路徑。考慮一下這個場景。如果a.jar中的一個類需要讀取b.jar中的資源文件,如何實現?
17、我可以同時使用相對路徑和絕對路徑嗎?
18、制作b.jar并將其添加到eclipse項目的buildpath中,如下所示:
19、可以得出這樣的結論:
20、可以使用相對路徑或絕對路徑來讀取這個jar或其他jar中的資源文件。但是不同之處在于,讀取這個jar包中的文件支持.這種編寫方法,但是你不能通過其他jar讀取文件.
21、spring框架的ClassPathResource實現
22、可以看到spring提供的ClassPathResource在底部是Class.getResource或者ClassLoader.getResource()。spring提供的讀取文件的API函數自然與JDK保持一致。
本文到此結束,希望對大家有所幫助。