簡體   English   中英

java.io.File(parent, child) 不能按預期工作

[英]java.io.File(parent, child) does not work as expected

我正在嘗試根據用戶提供的文件名(可以是絕對的或相對的)和依賴於環境的基目錄構造一個 Java File 對象。 java.io.File(File parent, String child) 的 java 文檔說明如下:

如果子路徑名字符串是絕對的,那么它以系統相關的方式轉換為相對路徑名

這讓我覺得如果我有以下代碼:

public class TestClass {
    public static void main(String[] args) throws IOException {
        File file = new File(new File("C:/Temp"),"C:/Temp/file.txt");
        System.out.println(file.getAbsolutePath());
    }
}

輸出將是

C:\Temp\file.txt

然后我會做生意,因為如果用戶提供絕對路徑或相對路徑,這將不再重要。 但實際上,輸出是

C:\Temp\C:\Temp\file.txt

這意味着我必須找出確切的相對路徑(或至少測試不同的選項以查看文件是否存在)。 我誤解了 JavaDoc 嗎?

如果子路徑名字符串是絕對的,那么它會以系統相關的方式轉換為相對路徑名。

我認為這意味着即使您提供了絕對路徑,它也會被轉換為(以依賴於系統的方式)並被視為相對路徑。

這意味着我必須找出確切的相對路徑(或至少測試不同的選項以查看文件是否存在)。

是的,我相信如此。

這也許可以輕松完成

file.getAbsolutePath().startsWith(parent.getAbsolutePath());

檢查它是否是parent目錄中的絕對路徑,以及

file.getAbsolutePath().substring(parent.getAbsolutePath().length());

得到相對部分。

將您的基本目錄表示為Path ,例如

Path basePath = new File("C:/Temp").toPath();

您可以使用Path.resolve來確定您的fileNamePath (或File ),無論它是絕對的還是相對的:

Path path = basePath.resolve(fileName).normalize();
File file = path.toFile();

這里額外的normalize只負責清理任何. ..從路徑。

暫無
暫無

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

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