1. Pathklase

Kung gusto mong magsulat ng isang programa na gumagawa ng isang bagay sa mga file sa disk, iyon ay medyo madali. Ang Java ay may maraming mga klase na makakatulong sa iyong magtrabaho kasama ang mga file mismo at ang kanilang mga nilalaman.

Ang mga unang bersyon ng Java ay gumamit ng mga klase tulad ng Fileat FileInputStreamupang gumana sa mga file. Gayunpaman, ang Fileklase ay hindi na ginagamit at hindi inirerekomenda para sa paggamit. Siyempre, maaari mo pa rin itong makatagpo sa code, mga parameter ng pamamaraan, o mga tagabuo ng klase.

Sa simula pa lang, magsisimula na tayong matutunan kung paano gumawa ng mga file gamit ang Pathklase. Pathay ang klase na pinalitan File. Ito ay mas ligtas at mas mahusay.

Pathklase

Sa teknikal, Pathay hindi isang klase — ito ay isang interface. Ginagawa ito upang payagan ang pagsulat ng isang inapo ng Pathklase para sa bawat operating system (at file system).

Ang Windows ay may isang pamantayan para sa pagsusulat ng mga path ng file, at ang Linux ay may isa pa. Siyempre, maraming iba pang mga operating system sa mundo, at bawat isa ay may sariling pamantayan.

Iyon ang dahilan kung bakit Pathginagamit ang interface sa lahat ng dako sa mga pamamaraan na gumagana sa mga file, bagaman sa katotohanan ang gawain ay nangyayari sa pamamagitan ng mga descendant na klase nito: WindowsPath, UnixPath, ...

Paglikha ng isang Pathbagay

Upang lumikha ng isang Pathbagay (na talagang magiging isang bagay ng WindowsPathdescendant class), kailangan mong gumamit ng isang pahayag na tulad nito:

Path name = Path.of(path);

Nasaan nameang pangalan ng isang Pathvariable, at pathang path patungo sa file (o direktoryo) kasama ang pangalan ng file (o direktoryo). At ofito ay isang static na pamamaraan ng Pathklase.

Ang of()pamamaraan ay ginagamit upang lumikha WindowsPathng mga bagay kung ang programa ay tumatakbo sa Windows. Kung ang programa ay tumatakbo sa Linux, ang UnixPathmga bagay ay nilikha. Hindi ka maaaring lumikha ng isang Pathbagay gamit ang code tulad ng .new Path()

Mga halimbawa:

Code Tandaan
Path file = Path.of("c:\\projects\\note.txt");
Path sa file
Path directory = Path.of("c:\\projects\\");
Path sa direktoryo

Ang file (o direktoryo) ay hindi kailangang umiral para Pathumiral ang isang wastong bagay. Baka gusto mo lang gumawa ng file... Ang isang Pathobject ay parang souped-up String: hindi ito nakatali sa isang partikular na file sa disk — nag-iimbak lang ito ng isang partikular na path sa disk. Ayan yun.


2. Mga pamamaraan ng Pathuri

Ang Pathinterface ay may ilang mga kagiliw-giliw na pamamaraan. Ang mga pinaka-kawili-wili ay ipinakita sa talahanayan sa ibaba.

Pamamaraan Paglalarawan
Path getParent()
Ibinabalik ang parent directory
Path getFileName()
Ibinabalik ang filename nang walang direktoryo
Path getRoot()
Ibinabalik ang root directory mula sa isang path
boolean isAbsolute()
Sinusuri kung ang kasalukuyang landas ay ganap
Path toAbsolutePath()
Kino-convert ang landas sa ganap
Path normalize()
Tinatanggal ang mga wildcard sa isang pangalan ng direktoryo.
Path resolve(Path other)
Bumubuo ng bagong absolute path mula sa absolute at relative path.
Path relativize(Path other)
Nakakakuha ng kamag-anak na landas mula sa dalawang ganap na landas.
boolean startsWith(Path other)
Sinusuri kung ang kasalukuyang landas ay nagsisimula sa isang ibinigay na landas
boolean endsWith(Path other)
Sinusuri kung ang kasalukuyang landas ay nagtatapos sa isang ibinigay na landas
int getNameCount()
Hinahati ang landas sa mga bahagi gamit /bilang isang delimiter.
Ibinabalik ang bilang ng mga bahagi.
Path getName(int index)
Hinahati ang landas sa mga bahagi gamit /bilang isang delimiter.
Ibinabalik ang isang bahagi ayon sa index nito.
Path subpath(int beginIndex, int endIndex)
Hinahati ang landas sa mga bahagi gamit /bilang isang delimiter.
Ibinabalik ang subpath na tumutugma sa ibinigay na agwat.
File toFile()
Kino-convert ang isang Pathbagay sa isang hindi na ginagamit Filena bagay
URI toUri()
Kino-convert ang isang Pathbagay sa isang URIbagay

Nasa ibaba ang isang maikling paglalarawan ng mga umiiral na pamamaraan.


3. Paghahati ng landas sa mga bahagi

Ibinabalik ng getParent()pamamaraan ang landas na tumuturo sa direktoryo ng magulang para sa kasalukuyang landas. Hindi alintana kung ang landas na ito ay isang direktoryo o isang file:

Code Halaga
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

Ang getFileName()pamamaraan ay nagbabalik ng isang solong file (o direktoryo) na pangalan - anuman ang dumating pagkatapos ng huling delimiter:

Code Halaga
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

Ibinabalik ng getRoot()pamamaraan ang landas sa root directory:

Code Halaga
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Absolute at relative na mga landas

Mayroong dalawang uri ng mga landas: ganap at kamag-anak. Ang isang ganap na landas ay nagsisimula sa root directory. Para sa Windows, maaaring ito ang c:\folder; para sa Linux — ang /direktoryo

Ang isang kamag-anak na landas ay makabuluhan na nauugnay sa ilang direktoryo. Iyon ay, ito ay tulad ng dulo ng kalsada, ngunit walang simula. Maaari mong gawing ganap na landas ang isang kamag-anak na landas at vice versa

boolean isAbsolute()paraan

Sinusuri ng pamamaraan kung ang kasalukuyang landas ay ganap

Code Halaga
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

Path toAbsolutePath()paraan

Kino-convert ang landas sa ganap. Kung kinakailangan, idagdag ang kasalukuyang gumaganang direktoryo dito:

Code Halaga
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

Path normalize()paraan

Sa path, sa halip na isang pangalan ng direktoryo, maaari mong isulat ang "..", na nangangahulugang bumalik sa isang direktoryo . Tinatanggal ng normalisasyon ang mga bagay na ito. Mga halimbawa:

Code Halaga
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

Path relativize(Path other)paraan

relativize()Hinahayaan ka ng pamamaraan na bumuo ng "mga pagkakaiba sa pagitan ng mga landas": isang landas na nauugnay sa isa pa

Code Halaga
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
IllegalArgumentException:
ang dalawang landas ay may magkaibang "ugat" (magkaibang mga disk)

Path resolve(Path other)paraan

Ang resolve()pamamaraan ay gumagawa ng kabaligtaran ng relativize(): ito ay bumubuo ng isang bagong ganap na landas mula sa isang ganap at isang kamag-anak na landas.

Code Halaga
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

toFile()paraan

Ang pamamaraan ay nagbabalik ng isang hindi na ginagamit Filena bagay na nag-iimbak ng parehong landas ng file bilang Pathbagay.

toURI()paraan

Ang pamamaraan ay nagko-convert ng landas sa isang karaniwang URI , at nagbabalik ng isang bagay na naglalaman ng landas sa file:

Path sa file URI sa file
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt