1. Filesklase

Klase ng file

Upang gumana sa mga file, mayroong isang makinis na klase ng utility — java.nio.file.Files. Mayroon itong mga pamamaraan para sa bawat okasyon. Ang lahat ng mga pamamaraan ng klase na ito ay static at gumagana sa Path object. Mayroong maraming mga pamamaraan, kaya't isasaalang-alang lamang namin ang mga pinakamahalaga:

Pamamaraan Paglalarawan
Path createFile(Path path)
Lumilikha ng bagong file na ang path aypath
Path createDirectory(Path path)
Lumilikha ng bagong direktoryo
Path createDirectories(Path path)
Lumilikha ng maramihang mga direktoryo
Path createTempFile(prefix, suffix)
Lumilikha ng pansamantalang file
Path createTempDirectory(prefix)
Lumilikha ng pansamantalang direktoryo
void delete(Path path)
Tinatanggal ang isang file o direktoryo kung ito ay walang laman
Path copy(Path src, Path dest)
Kumokopya ng file
Path move(Path src, Path dest)
Naglilipat ng file
boolean isDirectory(Path path)
Sinusuri kung ang path ay isang direktoryo at hindi isang file
boolean isRegularFile(Path path)
Sinusuri kung ang path ay isang file at hindi isang direktoryo
boolean exists(Path path)
Sinusuri kung mayroong isang bagay sa ibinigay na landas
long size(Path path)
Ibinabalik ang laki ng file
byte[] readAllBytes(Path path)
Ibinabalik ang buong nilalaman ng isang file bilang isang hanay ng mga byte
String readString(Path path)
Ibinabalik ang buong nilalaman ng isang file bilang isang string
List<String> readAllLines(Path path)
Ibinabalik ang buong nilalaman ng isang file bilang isang listahan ng mga string
Path write(Path path, byte[])
Nagsusulat ng hanay ng mga byte sa isang file
Path writeString(Path path, String str)
Nagsusulat ng string sa isang file
DirectoryStream<Path> newDirectoryStream(Path dir)
Nagbabalik ng koleksyon ng mga file (at mga subdirectory) mula sa ibinigay na direktoryo

2. Paglikha ng mga file at direktoryo

Napakadaling gawin ng mga file at direktoryo. Kumbinsihin natin ang ating sarili sa ilang mga halimbawa:

Code Tandaan
Files.createFile(Path.of("c:\\readme.txt"));
Gumagawa ng file
Files.createDirectory(Path.of("c:\\test"));
Lumilikha ng isang direktoryo
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Lumilikha ng isang direktoryo at lahat ng kinakailangang mga subdirectory kung wala ang mga ito.

3. Pagkopya, paglipat at pagtanggal

Ang pagkopya, paglipat at pagtanggal ng mga file ay kasingdali lang. Nalalapat din ito sa mga direktoryo, ngunit dapat na walang laman ang mga ito.

Code Tandaan
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Kumokopya ng file
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Inilipat at pinapalitan ang pangalan ng isang file
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Nagtatanggal ng file

4. Sinusuri ang uri at pagkakaroon ng file

Kapag mayroon kang landas na ibinigay ng ibang tao, gusto mong malaman kung ito ay isang file o isang direktoryo. At sa pangkalahatan, mayroon bang ganoong file/directory o wala?

May mga espesyal na pamamaraan din para dito. Madali mo ring malalaman ang haba ng isang file:

Code Tandaan
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. Paggawa gamit ang mga nilalaman ng file

Sa wakas, mayroong isang buong serye ng mga pamamaraan na ginagawang madaling basahin o isulat ang mga nilalaman ng isang file. Halimbawa:

Code Paglalarawan
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

Basahin ang mga nilalaman ng file bilang isang listahan ng mga string.

Ipakita ang mga string


6. Pagkuha ng mga nilalaman ng isang direktoryo

Ang pinaka-kagiliw-giliw na paraan ay nananatili pa rin. Ito ay ginagamit upang makakuha ng mga file at subdirectory sa isang naibigay na direktoryo.

Pinag-uusapan natin ang newDirectoryStream()pamamaraan, na nagbabalik ng isang espesyal DirectoryStream<Path>na bagay. Mayroon itong iterator(!) na magagamit mo upang makuha ang lahat ng mga file at subdirectory ng isang naibigay na direktoryo.

Ito ay mas madali kaysa ito tunog.

Code Paglalarawan
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


Kumuha ng isang bagay na may listahan ng mga file
I-loop ang listahan ng mga file

Ang DirectoryStream<Path>bagay ay may dalawang katangian. Una, mayroon itong iterator na nagbabalik ng mga path ng file, at magagamit natin ang bagay na ito sa loob ng isang for-eachloop.

At pangalawa, ang bagay na ito ay isang stream ng data, kaya dapat itong tahasang sarado gamit ang close()pamamaraan, o ipinahayag na paggamit sa loob ng isang try-with-resourcesbloke.



7. Files.newInputStreamparaan

Simula sa Java 5, ang FileInputStreamat FileOutputStreammga klase ay hindi na ginagamit. Ang isa sa kanilang mga disadvantages ay na kapag ang mga bagay ng mga klase ay nilikha, ang mga file ay agad na nilikha sa disk. At lahat ng mga pagbubukod na nauugnay sa paglikha ng file ay maaaring itapon.

Nang maglaon ay kinilala ito bilang hindi ang pinakamahusay na desisyon. Alinsunod dito, inirerekumenda na gamitin ang mga pamamaraan ng java.nio.Filesklase ng utility upang lumikha ng mga bagay ng file.

Narito ang isang paghahambing sa pagitan ng lumang diskarte at ang bagong diskarte sa paglikha ng mga file:

dati
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
Pagkatapos
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

At mayroong katulad na kapalit para sa FileOutputStream:

dati
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
Pagkatapos
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );