簡體   English   中英

應用程序根目錄中目錄的相對路徑-Java Web應用程序

[英]Relative path to a directory in application root - Java Web Application

我正在努力獲取放置在Web根文件夾中的fileroot目錄的相對路徑。 我試圖從一個類訪問此目錄,以通過Web Service返回其中的文件名。 該文件夾包含圖像和XML文件。

這是我從分解的.WAR文件中看到的項目結構-

我的項目
-文件根
-CSS
-...
-網絡信息
| --classes

當我在本地驅動器上使用硬編碼的絕對路徑讀取目錄中的文件時,我能夠使它工作。 但是,我需要它在無法使用絕對路徑的Web服務器上工作。

我需要從班級內部訪問此文件夾,以便能夠在XML上進行一些處理,同時能夠從網頁的文件夾中提供圖像。

這是為讀取目錄而編寫的代碼-

package com.xyz.executor;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;

/**
 *
 * @author AJ
 */
public class GetDirectories {

    public String basePath = "/fileroot";
    public String directoryName;

    public GetDirectories() {
    }

    public GetDirectories(String DirectoryName) {
        this.directoryName = DirectoryName;

        basePath = basePath + "/" + directoryName;
    }

    public ArrayList<String> read() {
        ArrayList<String> DirectoryList = new ArrayList<>();

        try {
            File f = new File(basePath); // current directory

            FileFilter directoryFilter = new FileFilter() {
                public boolean accept(File file) {
                    return file.isDirectory();
                }
            };

            File[] files = f.listFiles(directoryFilter);
            for (File file : files) {
                if (file.isDirectory()) {
                    System.out.print("directory:");
                    DirectoryList.add(file.getName());
                } else {
                    System.out.print("     file:");
                }
                System.out.println(file.getName());
            }
        } catch (Exception e) {
            System.out.println("Exception occurred (GetDirectories) : " + e.toString());
            e.printStackTrace();
            System.out.println("**************************");
        }
        return DirectoryList;
    }
}

我收到一個null pointer exception因為f.listFiles(directoryFilter)返回null ,因此我懷疑路徑存在問題。

問題1 ,如何在類文件中獲取應用程序的根路徑?
問題2 ,通過將目錄放在應用程序根目錄中,我做對了嗎? 還是應該將其放置在驅動器上的其他位置?

PS:我之前編寫了一個Web應用程序,該應用程序讀取類似於此問題的類路徑中存儲的.properties文件。 但是,對於大量文件來說,這似乎不是一個好主意

在應用程序服務器上,默認路徑是啟動服務器的路徑(即,啟動服務器時所在的文件夾)或bin文件夾。 因此,目錄和文件應位於其中。 一種檢查您所在路徑的快速方法是打印或記錄f.getAbsolutePath()的結果,這將告訴您服務器默認使用的文件夾。

您正在正常打開文件( new File(...) ),而不是將其作為資源打開,因此未使用資源路徑或類路徑。

處理應用程序服務器時,最好避免使用默認路徑,因為它很容易更改。 具有定義要在何處搜索文件的系統屬性或等效項,或者,如果要與應用程序一起運送要讀取的文件,請將其放在WAR中並作為資源打開:

YourClass.class.getResourceAsStream("/...");

要么

YourClass.class.getResource("/...");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM