java路徑問題。

本文只是基於FileOuutPut和this.getClass().getResourceAsSream()做的測試。

package com.eblly.xml;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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

public class BookXml {
    /*
     * 獲取book.xml所有信息 ,幷封裝成對象
     */
    public List<Book> findAll(){
        InputStream is = null;
        //需要返回的書單
        List<Book> bookList = new ArrayList<>();
        try{
//            is = new FileInputStream("/home/eblly/program/java/eclipse/xmlhomework0704/src/book.xml");   //使用絕對路徑可以讀得出

        File file = new File("src/book.xml"); //輸出File裏面的String參數

//            System.out.println(file);
//            is = new FileInputStream("src/book.xml");  //可以輸出
//            is = new FileInputStream("/src/book.xml");  //java.io.FileNotFoundException: /src/book.xml
//            is = new FileInputStream("./src/book.xml");  //可以輸出
//            is = new FileInputStream("./book.xml");   //java.io.FileNotFoundException: ./book.xml
//            is = new FileInputStream("/book.xml");   //java.io.FileNotFoundException: /book.xml
//            is = new FileInputStream("book.xml");   //java.io.FileNotFoundException: book.xml
            
            //這個使用相對路徑即可
//            is = this.getClass().getResourceAsStream("/book.xml");      //可以輸出
//            is = this.getClass().getResourceAsStream("src/book.xml");  //null
//            is = this.getClass().getResourceAsStream("./book.xml");   //null
//            is = this.getClass().getResourceAsStream("book.xml");    //null
//            System.out.println(this.getClass());                    //class com.eblly.xml.BookXml
//            System.out.println(this.getClass().getResource("/")); //file:/home/eblly/program/java/eclipse/xmlhomework0704/bin/
//            System.out.println(this.getClass().getResource("./"));//file:/home/eblly/program/java/eclipse/xmlhomework0704/bin/com/eblly/xml/
//            System.out.println(this.getClass().getResource("/.."));//null
//            System.out.println(this.getClass().getResource("."));//file:/home/eblly/program/java/eclipse/xmlhomework0704/bin/com/eblly/xml/
//            System.out.println(this.getClass().getResource("../"));//file:/home/eblly/program/java/eclipse/xmlhomework0704/bin/com/eblly/
//            System.out.println(this.getClass().getResource("../../"));//file:/home/eblly/program/java/eclipse/xmlhomework0704/bin/com/
//            System.out.println(this.getClass().getResource("../../../"));//file:/home/eblly/program/java/eclipse/xmlhomework0704/bin/
//            System.out.println(this.getClass().getResource("../../../../"));//null
//            is = this.getClass().getResourceAsStream("/xml/book.xml");      //可以
            
            
            /*
             * FileInputStream是指向/home/eblly/program/java/eclipse/xmlhomework0704,
             * 而this.getClass()是指向運行文件的目錄,即/home/eblly/program/java/eclipse/xmlhomework0704/bin
             * 
             * 如果把book.xml放到xml文件夾裏面,而xml文件是xmlhomework0704的子目錄的話,is = new FileInputStream("src/book.xml")需要
             * 把src改成xml. 而getResourceAsStream則無法獲得book.xml。
             * 如果把book.xml放到xml文件夾裏面,而xml文件是src的子目錄的話,,is = new FileInputStream("xml/book.xml")可以獲得文件,
             * is = this.getClass().getResourceAsStream("/xml/book.xml")也可以獲得文件。
             * 
             * 而 this.getClass().getResourceAsStream("/book.xml")的“根目錄”就是/home/eblly/program/java/eclipse/xmlhomework0704/bin,
             * 所以再怎麼上一層目錄還是不變。如果xml文件夾在src下,book.xml在xml文件夾中,使用/xml/book.xml可以獲得文件。
             * 
             * FileInputStream和this.getClass().getResourceAsStream("/book.xml")還有一個區別在於根目錄"/"的寫入與否。FileInputStream一系統
             * 根目錄爲根目錄,getResourceAsStream是以bin爲根目錄。
             * 
             */
            
//            URL str = this.getClass().getResource("/book.xml");   //file:/home/eblly/program/java/eclipse/xmlhomework0704/bin/book.xml
//            System.out.println(is);
            Document document = new SAXReader().read(is);
            Element root = document.getRootElement();
            //書裏面的元素
            List<Element> elementList = root.elements();
            for(Element e : elementList){
                Book book = new Book();
                book.setId(e.elementText("id"));
                book.setName(e.elementText("name"));
                book.setAuthor(e.elementText("author"));
                book.setPrice(e.elementText("price"));
                book.setImage(e.elementText("image"));
                book.setRemark(e.elementText("remark"));
                bookList.add(book);
            }
                
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            try{
                is.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        return bookList;
    }
    
    public static void main(String[] args){
        BookXml bookxml = new BookXml();
        List<Book> list = bookxml.findAll();
        for(Book book : list){
            System.out.println("id號:" + book.getId());
            System.out.println("書名:" + book.getName());
            System.out.println("價格:" + book.getPrice());
            System.out.println("相片:" + book.getImage());
            System.out.println("簡介:" + book.getRemark());
            System.out.println();
        }
    }

}

項目在eclipse中的文件目錄如下:

在硬盤上,項目的文件目錄如下:

FileOutPutStream和FileInPutStream是一樣的。本文是對xml文件進行操作,需要導入dom4j包。

注:在eclipse中,它會自動把你的src文件夾生成一個bin文件夾,幷把裏面所有的.java編譯成.class文件,src裏面的其他文件則是原樣複製。

這僅僅是在eclipse裏才是這樣,如果你使用vim或者editplus編譯,則需要自己使用命令編譯。

java路徑問題。

时间: 2024-11-12 16:58:03

java路徑問題。的相关文章

javaWeb的路徑問題.

在eclipse裏面創建web項目,在eclipse裏面顯示的目錄關係和實際在tomcat運行時的目錄關係有如下變化: =======elicpse======================    ==================Tomcat=========== 變化:eclipse的src變成WEB-INF下面的classes,WebContent直接變成項目名. 當前路徑是項目當前路徑. javaWeb的路徑問題.,布布扣,bubuko.com

解決Spring的定時器如何獲取項目的部署路徑

最近在寫項目的時候遇到在Spring的定時器下需要用到項目路徑的,但是在定時器中,沒法獲取request或者session不能直接調用他的方法直接獲得,那麼怎麼解決這樣的問題呢?其實還是有辦法的,正所謂條條道路通羅馬,spring這麼強大怎麼可能被這點小事給整過去. 我舉個例子吧,加入我們需要些這麼個定時器,他的需求如下:每天進行一次項目生成的一次性的文件進行刪除 那麼定時器代碼如下: package com.smartsoft.quartz; import java.io.File; impo

BT觀念分享和常見問題彙整

一. TCP/IP基本觀念 1. IP : 每台在TCP/IP網路上的電腦必須具備的一個代表號或一個地址.IP又分為private IP(192.168.x.x /10.x.x.x /172.16.x.x~172.31.x.x)和public IP(除了少數特殊IP,只要不是private IP就是public IP). 2. port : port可視為TCP/IP網路中電腦提供的某種服務的門牌號碼,號碼(port的數值)是多少不重要,號碼代表的服務才重要.例如: port80代表web的服務

C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem

原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLTXvXJlIqeavUo1Ak%3D&b=6 如果要在 C++ 裡對特定的檔案做存取,其實透過 STL 的 fstream(參考)來做,一般是不會有什麼問題的:相對的,問題比較大的部分,可能會是在於對於資料夾(folder.directory)的處理,以及對於路徑的操作上.像是以路徑來說,Windo

大數據時代的不平等問題

一家國際著名保險公司與提供大數據的公司合作,推出一款針對不同駕車群體的保險計劃.這一計劃的要點是,由大數據公司對不同潛在客戶的駕車習慣進行分析,如果數據表明某位客戶是白天上班,路也近,而且所經過的地帶是安全路線,客戶駕車習慣良好,沒有特別情緒化舉動,那麼,給其所賣的保險可以打折:反之,如果數據表明某位客戶是上夜班,上班地點也遠,所經過的路線有風險,客戶駕車習慣也不好,常無法控制自己的行為,那麼,保險公司將提高其所繳納保費額度.從商業角度看,保險公司這樣做,是為了更精確地細分市場,賺取更高利潤,這

STM32 I2C 總線佔用問題解析

这几天解决 STM32 MCU的I2C 总线占用(bus BUSY) 问题,觉得是不错的学习,从文中可得知I2C问题的思考逻辑逻,文末并指出经常出错的问题点,在此分享给大家. 问题描述 STM32F207 MCU有三组I2C,I2C1~I2C3,此项目的初版硬件使用I2C1接三颗chip (DSP/Codec/EEPROM),运作良好. 但新硬件把Codec/EEPROM移到I2C3,DSP还是留在I2C1,发现I2C3有机会传输失败,失败時log打总线占用(Bus BUSY) 查MCU dat

解決數據質量問題是大數據應用的關鍵

研究稱,整個人類文明所獲得的全部數據量,有90%是最近兩年內產生的.隨著移動互聯大潮的席捲,預計通過網路產生的數據量還將呈幾何級增長.龐大的數據資源蘊藏著無限的寶藏,過去的一年無論是企業.政府還是媒體,都在談論大數據.有人說大數據是黃金.是競爭力,然而在這一切談論的背後卻鮮有人關注數據質量這個最根本的問題.普元數據產品總監王軒認為,大數據處理的關鍵就是解決數據質量問題,規避數據錯誤.保障數據質量才能真正讓企業從大數據應用中獲得利益.保障數據質量成為大數據發揮價值的先決條件「企業做數據集成.數據處

開學小問題

暗號:老師別錯過學生們吐露心聲的時候喔! 1.翻阅邹欣老师的关于师生关系博客,并回答下列问题,每个问题的答案不少于500字: 1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得来自老师的哪些帮助? 在這種關係中,我期望獲得來自老師的幫助就是:老師能定期的根據我們學生的學習新知識的時間長度來安排相應PTA作業的難易程度,根據休息時間的長短來限定作業量,使它們兩能成正比,此外對於學生們的問題能夠及時地指出,最好是針對個人的單獨提醒,不是在班級里的班級批評.在課堂上,老師的教學不僅

繁體字顯示問題

宋體筆畫設計簡單,加之hint的作用,所以實用性很高.MingLiU筆畫很有藝術性,hint不好做,所以必須用大字號才能看清楚其細節.因為電腦顯示技術的限制,導致其在普通字體大小下,筆畫基本上是貼在一起,非常不實用.日文有很多字體,主流是哪種我也不知道,不過總體的觀感就是既美觀又實用.簡體字設置成宋體13px,已經基本上能看清楚,正文是16px,效果更好,可以打80分.繁體字設置微軟正黑體,或者宋體,在16px就差強人意了.繁體字設置成MingLiU,如果要求筆畫不發虛,拐角能看清楚,則最少需要