如何手動獲取maven項目中resource目錄下的文件(包括二級目錄下的文件)


maven項目具有特定的項目結構,所以自定義的一些文件需要通過特殊的訪問方式才能在代碼中訪問,而不能通過簡單的絕對路徑或相對路徑就能訪問。

maven打包項目的時候,其實改變了原有編碼時的結構,如圖:

 編碼時的項目結構:

 maven打包時的項目結構: 

其實maven項目在運行的時候,其實執行的是target目錄下的class代碼。但是編碼的時候如果按照原有的文件路徑訪問本項目中的文件,那么會找不到文件。

所以需要換一個方式

以該項目結構為例

  • 訪問1號文件
    • 方式一
    • ClassLoader classLoader = DocOperator.class.getClassLoader();
       URL resource = classLoader.getResource("00000.docx");
       String path = resource.getPath();
       System.out.println(path);
    • 方式二
    • URL resource1 = DocOperator.class.getResource("/00000.docx");
      System.out.println(resource1.getPath());
      String path = resource1.getPath();
            
  •  訪問2號文件

  訪問2號文件時,需要修改pom文件,因為maven會忽略「case」這個文件夾,也就是target目錄中會沒有「case」目錄,自然在Java代碼中也就訪問不到了。

  所以需要在pom文件中新增一個配置

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <!--包含文件夾以及子文件夾下所有資源-->
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>
    </build>

  新增之后

  

  然后就可以按照訪問文件1的方式訪問文件2,只需要將路徑改成「case/00000.docx」。

注意事項:

  •  路徑前面加「/」和不加的區別
URL resource1 = DocOperator.class.getResource("/");
URL resource2 = DocOperator.class.getResource("");
System.out.println("帶斜杠: " + resource1.getPath());
System.out.println("不帶斜杠: " + resource2.getPath());

帶有「/」訪問的是根目錄,不帶「/」訪問的是所有類的公共包名。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM