![](/img/trans.png)
[英]Do java.io.File(String parent, String child) and java.io.File(String pathname) do the same work?
[英]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
來確定您的fileName
的Path
(或File
),無論它是絕對的還是相對的:
Path path = basePath.resolve(fileName).normalize();
File file = path.toFile();
這里額外的normalize
只負責清理任何.
或..
從路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.