"Oh, Rishi! Hi!"

"Hi, Amigo! Kamusta ang buhay?"

"Magaling. Kakasabi pa lang ni Bilaabo sa akin ng isang grupo ng mga kawili-wiling bagay tungkol sa File, at kung paano ito gagawin."

"Habang nangyayari, sa palagay ko ay mayroon akong idadagdag sa paksang ito."

"Talaga? Tapos todo tenga ako."

"Okay, makinig ka. Ang Java ay patuloy na umuunlad. Ang mga developer nito ay patuloy na naghahanap ng mga bagong paraan upang makagawa ng iba't ibang bagay nang mas mahusay. Sa Java 7, nagdagdag sila ng alternatibo sa klase ng File."

Mga File, Landas - 1

"Alternatibo?"

"Oo. Kinuha nila ang klase ng File bilang batayan, nagdagdag ng ilang bagong bagay, pinalitan ang pangalan ng mga pamamaraan, at pagkatapos ay hinati din ito sa dalawa. Kaya ngayon ay may dalawang bagong klase: Path at FilesAng Path ay talagang bagong analogue ng File. class, at ang File ay isang utility class (katulad ng Arrays and Collections classes). Lahat ng static na pamamaraan ng File class ay napupunta doon. Ang paggawa nito sa paraang ito ay 'mas tama' sa mga tuntunin ng OOP."

"Well, if it's in terms of OOP, then okay. So what changed?"

"Una, nagpasya sila na huwag kopyahin ang mga pamamaraan na nagbabalik ng  mga String  at File object. Sa klase ng Path  , lahat ng mga pamamaraan ay nagbabalik ng isang Path .

"Pangalawa, inilipat nila ang maraming static na pamamaraan ng utility sa klase ng Files ."

"Ikatlo, naging mas maginhawang magtrabaho sa mga kamag-anak na landas."

"Narito ang isang listahan ng mga pamamaraan:"

Mga Paraan ng klase ng Path Paglalarawan
boolean isAbsolute() Nagbabalik ng totoo kung ang landas ay ganap.
Path getRoot() Ibinabalik ang ugat ng kasalukuyang landas, ibig sabihin, ang pinakamataas na direktoryo.
Path getFileName() Ibinabalik ang pangalan ng file mula sa kasalukuyang landas.
Path getParent() Ibinabalik ang direktoryo mula sa kasalukuyang landas.
boolean startsWith(Path other) Sinusuri kung ang kasalukuyang landas ay nagsisimula sa naipasa na landas.
boolean endsWith(Path other) Sinusuri kung ang kasalukuyang landas ay nagtatapos sa naipasa na landas.
Path normalize() Pina-normalize ang kasalukuyang landas. Halimbawa, kino-convert ang «c:/dir/dir2/../a.txt» sa «c:/dir/a.txt»
Path relativize(Path other) Kinakalkula ang kamag-anak na landas ng dalawang landas, ibig sabihin, "ang pagkakaiba sa pagitan ng mga landas"
Path resolve(String other) Nagre-resolve ng absolute path gamit ang kasalukuyan at relative path.
URI toUri() Ibinabalik ang URI kung ang kasalukuyang path/file.
Path toAbsolutePath() Kino-convert ang landas sa isang ganap na landas kung ito ay kamag-anak.
File toFile() Nagbabalik ng File object na tumutugma sa kasalukuyang Path object.

"At ang kasalukuyang landas—ano iyon?"

"Ito ang landas na ipinasa sa tagabuo ng bagay na Path na ang mga pamamaraan ay tinatawag."

"OK. Kaya anong mga pamamaraan mayroon ang klase ng Files ?"

"Nagmamadali ka bang pumunta sa isang lugar? Sasabihin ko sa iyo ngayon. Narito ang pinakamahalagang pamamaraan:"

Mga pamamaraan ng klase ng Files Paglalarawan
Path createFile(…) Lumilikha ng isang file sa disk.
Path createDirectory(…) Lumilikha ng isang direktoryo.
Path createDirectories(…) Lumilikha ng isang direktoryo at lahat ng mga subdirectory nito.
Path createTempFile(…) Lumilikha ng pansamantalang file.
Path createTempDirectory(…) Lumilikha ng pansamantalang direktoryo.
void delete(Path path) Nagtatanggal ng file.
Path copy(Path source, Path target,…) Kumokopya ng file.
Path move(Path source, Path target,…) Naglilipat ng file.
boolean isSameFile(Path, Path) Naghahambing ng dalawang file.
boolean isDirectory(Path) Direktoryo ba ang Path?
boolean isRegularFile(Path) Ang Path ba ay isang file?
long size(Path) Ibinabalik ang laki ng file.
boolean exists(Path) Mayroon bang isang bagay na may parehong pangalan?
boolean notExists(Path) Wala bang isang bagay na may parehong pangalan?
long copy(InputStream, OutputStream) Kinokopya ang mga byte mula sa InputStream patungo sa OutputStream.
long copy(Path, OutputStream) Kinokopya ang lahat ng byte mula sa Path patungo sa OutputStream.
long copy(InputStream, Path) Kinokopya ang lahat ng byte mula sa InputStream papunta sa Path.
byte[] read(InputStream, int initialSize) Nagbabasa ng hanay ng mga byte mula sa InputStream.
byte[] readAllBytes(Path path) Binabasa ang lahat ng byte mula sa InputStream.
List<String> readAllLines(Path path,..) Binabasa ang text file at nagbabalik ng listahan ng mga string.
Path write(Path path, byte[] bytes,…) Nagsusulat ng hanay ng mga byte sa isang file.

"Nakakainteres! Napakaraming cool na function, at lahat sa parehong lugar."

"Well look. Ipagpalagay na gusto mong mag-download ng file mula sa Internet, at pagkatapos ay ipadala ito sa isang tao. Para magawa ito, napaka-convenient na gumawa ng pansamantalang file sa disk at i-save ang nabasang data dito."

"Mahirap bang mag-download ng file mula sa Internet?"

"Napakasimple nito. Tingnan ang halimbawang ito:"

Code
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"At yun lang?"

"Yes, what did you expect to see? 4 lines lang naman."

" Linya 1.  Lumilikha ng URL object, kung saan ipinapasa ang URL ng image file.

" Linya 2.  Ang isang stream para sa pagbabasa ng isang file (InputStream) ay binuksan sa url object.

" Linya 3.  Ang createTempFilepamamaraan ay ginagamit upang lumikha ng isang pansamantalang file.

" Linya 4.  Kinokopya ng paraan ng Files.copy ang data mula  inputStream sa tempFile. Iyon lang."

"Matalino!"

"Great. I'm glad you like it. I think you can find out the rest of the ways yourself. And I'll ask Diego to give you several tasks about them."

"Nga pala, narito ang isang magandang link sa materyal na ito"