原文鏈接:https://blog.csdn.net/Activity_Time/article/details/98034409
1. URL
菜鳥教程:Java URL處理
通常推薦對http等協議進行使用,若操作(file:)部分屬性將無意義,建議getFile()。


相關:URLConnections 類 可以打開連接進行IO
- 通過getResource方法可以獲得相對於classPath的文件的URL

2. File
菜鳥教程:Java File類
JAVA基礎知識之IO-File類
路徑測試代碼:
@Test
void test7() throws IOException {
String dirname = "./file.txt";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println(dirname + " is a directory");
} else {
System.out.println(dirname + " is not a directory");
}
System.out.println("CanonicalPath:" + f1.getCanonicalPath());
System.out.println("AbsolutePath :" + f1.getAbsolutePath());
System.out.println("Path :" + f1.getPath());
}
"./file.txt" :輸出結果
./file.txt is not a directory
CanonicalPath:E:\a\MyFilesNoCh\JAVA\eclipse-jee-2018-09-win32-x86_64-Spring-Hibernate\ClassPathTest\file.txt
AbsolutePath :E:\a\MyFilesNoCh\JAVA\eclipse-jee-2018-09-win32-x86_64-Spring-Hibernate\ClassPathTest.\file.txt
Path :.\file.txt
"/file.txt" :輸出結果
/file.txt is not a directory
CanonicalPath:E:\file.txt
AbsolutePath :E:\file.txt
Path :\file.txt
"file.txt" :輸出結果
file.txt is not a directory
CanonicalPath:E:\a\MyFilesNoCh\JAVA\eclipse-jee-2018-09-win32-x86_64-Spring-Hibernate\ClassPathTest\file.txt
AbsolutePath :E:\a\MyFilesNoCh\JAVA\eclipse-jee-2018-09-win32-x86_64-Spring-Hibernate\ClassPathTest\file.txt
Path :file.txt
- 結論
CanonicalPath返回全路徑,但不會包含../.等符號AbsolutePath返回全路徑,會包含../.等符號- 使用
/開頭,會從磁盤根目錄開始索引 - 不使用
/開頭,會從eclipse項目根目錄開始索引
- 【4.該方法不可實用,在生產環境中結果難以預料,建議總是以classPath類資源根目錄進行定位】關於java/Web中配置文件讀取路徑(classPath與類加載器的關系/Resource),以及讀取Properties文件的方法
getPath返回的是對象創建是的路徑參數
3. Path
Java7中文件IO發生了很大的變化,專門引入了很多新的類:
import java.nio.file.DirectoryStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
其中Path在功能上可以說和原來的File相似,包含了各種路徑處理操作,而新的File及其相關類Files可以說是包含了絕大多數的文件操作方法,比如創建、復制、遍歷、重命名、權限、可否執行等。。。也可以直接獲取流對象。

[二] JavaIO之File詳解 以及FileSystem WinNTFileSystem簡介
java Files類和Paths類的用法 (轉)

URI和URL都定義了資源是什么,但URL還定義了該如何訪問資源。URL是一種具體的URI,它是URI的一個子集,它不僅唯一標識資源,而且還提供了定位該資源的信息。URI 是一種語義上的抽象概念,可以是絕對的,也可以是相對的,而URL則必須提供足夠的信息來定位,是絕對的。
-
FileSystem到底是什么?
操作系統有各自的文件系統,這些文件系統又存在很多差異,而Java 因為是跨平台的,所以它必須要統一處理這些不同平台文件系統之間的差異,才能往上提供統一的入口。
說白了又是接口來實現統一,不同的操作系統實現這個接口,就可以提供統一的表現形式
FileSystem是一個抽象類 ,
windows下的實現類為:WinNTFileSystem,在IDE中可以直接找到
可能你只是找到了一個WinNTFileSystem,只有一個要接口還有什么意思?
如果你目前只看到了一個WinNTFileSystem 那說明你在Windows下
WinNTFileSystem類 和 UnixFileSystem類並不是在同一個 JDK 里面,也就是說它們是分開的
你只能在 Windows 版本的 JDK 中找到 WinNTFileSystem,而在 Linux 版本的 JDK 中找到 UnixFileSystem
同樣地,其他操作系統也有自己的文件系統實現類。
