JavaRush /Java Blog /Random-TK /Java faýllary, ýol

Java faýllary, ýol

Toparda çap edildi
Salam! Bu gün faýllar we kataloglar bilen işlemek barada gürleşeris. Faýllaryň mazmunyny nädip dolandyrmalydygyny eýýäm bilýärsiňiz: muňa bagyşlanan köp sapaklarymyz bardy :) Meniň pikirimçe, bu maksatlar üçin zerur bolan birnäçe synpy aňsatlyk bilen ýatda saklap bilersiňiz. Şu günki leksiýamyzda faýl dolandyryşy - döretmek, adyny üýtgetmek we ş.m. hakda aýratyn gürleşeris. Java 7-den öň şeýle amallaryň hemmesi ulanyp ýerine ýetirildi File. Onuň işi barada şu ýerden okap bilersiňiz . Emma Java 7-de dili döredijiler faýllar we kataloglar bilen işleýşini üýtgetmek kararyna geldiler. Munuň sebäbi synpyň Filebirnäçe kemçilikleri bardy. copy()Mysal üçin, bir faýly bir ýerden başga ýere göçürmäge mümkinçilik berýän usuly ýokdy (düşnükli ýaly görünýän aýratynlyk). Mundan başga-da, synpda bahalary Fileyzyna gaýtarýan köp usul bardy boolean. Erroralňyşlyk ýüze çyksa, beýle usul kadadan çykma däl-de, ýalňyş gaýtarýar , bu ýalňyşlary anyklamagy we sebäplerini kesgitlemegi kynlaşdyrýar. Bir synpyň ýerine File3 synp peýda boldy Paths: Pathwe Files. Dogrusyny aýtsam, Pathbu synp däl-de, interfeýs. Olaryň biri-birinden nähili tapawutlanýandyklaryny we olaryň hersiniň näme üçin zerurdygyny kesgitläliň. Iň aňsat zat bilen başlalyň - Paths.

.Ollar

Pathsýeke statiki usuly bolan gaty ýönekeý synpdyr get(). Diňe geçen setirden ýa-da URI-den görnüş görnüşini almak üçin döredildi Path. Başga funksiýasy ýok. Ine, onuň işine mysal:
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {

   public static void main(String[] args) {

       Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt");
   }
}
Iň kyn synp däl, şeýlemi? :) Bolýar, bir görnüşli obýekt alanymyzdan soň , onuň nämedigini we näme üçin zerurdygyny Pathanyklalyň :)Path

.Ol

Path, umuman aýdylanda, täzeden işlenip düzülen analog File. Bilen işlemek has aňsat File. Ilki bilen köp peýdaly (statiki) usullar ondan aýryldy we synpa geçirildi Files. Ikinjiden , Pathusullaryň yzyna gaýtaryş bahalary sargyt edildi. Synpda Fileusullar muny yzyna gaýtardy , Stringdüşünmek aňsat däldi. Mysal üçin, häzirki faýl üçin esasy ýoly setir hökmünde yzyna gaýtarýan usul bardy . Theöne şol bir wagtyň özünde şol bir zady yzyna gaýtaryp berýän, ýöne obýekt görnüşinde bir usul bardy ! Bu gaty zerur. Şonuň üçin interfeýsde faýllar bilen işlemegiň usuly we beýleki usullary diňe bir obýekti yzyna gaýtaryp berýär . Köp sanly wariant ýok - hemme zat aňsat we ýönekeý. Onuň haýsy peýdaly usullary bar ? Ine, olaryň käbiri we işleriniň mysallary: booleanFilegetParent()getParentFile()FilePathgetParent()PathPath
  • getFileName()- faýlyň adyny ýoldan gaýtaryp berýär;

  • getParent()- häzirki ýol bilen baglanyşykly “ene-atanyň” katalogyny yzyna gaýtaryp berýär (ýagny katalog agajynda has ýokary bolan katalog);

  • getRoot()- “kök” katalogyny yzyna berýär; ýagny katalog agajynyň ýokarsyndaky;

  • startsWith(), endsWith()- ýoluň geçen ýol bilen başlaýandygyny / gutarýandygyny barlaň:

    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    public class Main {
    
       public static void main(String[] args) {
    
           Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt");
    
           Path fileName = testFilePath.getFileName();
           System.out.println(fileName);
    
           Path parent = testFilePath.getParent();
           System.out.println(parent);
    
           Path root = testFilePath.getRoot();
           System.out.println(root);
    
           boolean endWithTxt = testFilePath.endsWith("Desktop\\testFile.txt");
           System.out.println(endWithTxt);
    
           boolean startsWithLalala = testFilePath.startsWith("lalalala");
           System.out.println(startsWithLalala);
       }
    }

    Konsol çykyşy:

    testFile.txt
    C: \ Ulanyjylar \ Ulanyjy ady \ Iş stoly
    C: \
    hakyky
    ýalan

    Usulyň işleýşine üns beriň endsWith(). Häzirki ýoluň geçen ýol bilen gutarýandygyny ýa-da ýokdugyny barlaýar . Nyşanlar toplumynda däl - de , ýolda .

    Bu iki jaňyň netijelerini deňeşdiriň:

    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    public class Main {
    
       public static void main(String[] args) {
    
           Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt");
    
           System.out.println(testFilePath.endsWith("estFile.txt"));
           System.out.println(testFilePath.endsWith("Desktop\\testFile.txt"));
       }
    }

    Konsol çykyşy:

    false
    true

    Diňe bir simwol toplumy däl-de, usuly doly ýoly geçmeli: ýogsam häzirki ýol hakykatdanam simwollaryň yzygiderliligi bilen gutarsa-da netije hemişe ýalanendsWith() bolar (“estFile.txt” ýaly) "Aboveokardaky mysalda).

    Mundan başga-da, mutlak (doly) we degişlilikde ýollar bilen işlemegi ýönekeýleşdirýän usullar topary barPath .

Geliň şu usullara seredeliň:
  • boolean isAbsolute()- häzirki ýol mutlak bolsa hakykata gaýdyp geler:

    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    public class Main {
    
       public static void main(String[] args) {
    
           Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt");
    
           System.out.println(testFilePath.isAbsolute());
       }
    }

    Konsol çykyşy:

    dogry

  • Path normalize()- Gereksiz elementleri aýyryp, häzirki ýoly "kadalaşdyrýar". Meşhur operasiýa ulgamlarynyň ýollary aňladanda köplenç “.” Nyşanlaryny ulanýandygyny bilip bilersiňiz. (“Häzirki katalog”) we “..” (esasy katalog). Mysal üçin: “ ./Pictures/dog.jpg ” häzirki katalogymyzda Suratlar bukjasynyň we içinde “dog.jpg” faýlynyň bardygyny aňladýar.

    Ine, şu ýerde. Programmaňyzda “ulanýan” ýol bar bolsa. ýa-da “..”, usul normalize()olary aýyrar we öz içine almaýan ýol alar:

    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    public class Main {
    
       public static void main(String[] args) {
    
    
           Path path5 = Paths.get("C:\\Users\\Java\\.\\examples");
    
           System.out.println(path5.normalize());
    
           Path path6 = Paths.get("C:\\Users\\Java\\..\\examples");
           System.out.println(path6.normalize());
       }
    }

    Konsol çykyşy:

    C: \ Ulanyjylar \ Java \ mysallar
    C: \ Ulanyjylar \ mysallar

  • Path relativize()- häzirki we geçen ýoluň arasyndaky deňeşdirilen ýoly hasaplaýar.

    Mysal üçin:

    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    public class Main {
    
       public static void main(String[] args) {
    
           Path testFilePath1 = Paths.get("C:\\Users\\Users\\Users\\Users");
           Path testFilePath2 = Paths.get("C:\\Users\\Users\\Users\\Users\\Username\\Desktop\\testFile.txt");
    
           System.out.println(testFilePath1.relativize(testFilePath2));
       }
    }

    Konsol çykyşy:

    Ulanyjy ady \ Iş stoly \ testFile.txt

Usullaryň doly sanawy Pathgaty uly. Olaryň hemmesini Oracle resminamalarynda tapyp bilersiňiz . Gözden geçirmäge dowam ederis Files.

Faýllar

Files- bu synpdan statiki usullaryň göçürilen peýdaly synpy File. Files- bu takmynan birmeňzeş Arraysýa-da Collectionsdiňe faýllar bilen işleýär, massiwler we kolleksiýalar bilen däl :) Faýllary we kataloglary dolandyrmaga gönükdirilendir. Statiki usullary ulanyp Files, faýllary we kataloglary döredip, pozup we göçürip bileris. Bu amallar üçin usullar ulanylýar createFile()(kataloglar üçin - createDirectory()) move()we delete(). Olary nähili ulanmaly:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;

public class Main {

   public static void main(String[] args) throws IOException {

       //file creation
       Path testFile1 = Files.createFile(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt"));
       System.out.println("Was the file created successfully?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));

       // create directory
       Path testDirectory = Files.createDirectory(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory"));
       System.out.println("Was the directory successfully created?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory")));

       //move file from desktop to testDirectory. You need to move with the name of the file in the folder!
       testFile1 = Files.move(testFile1, Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt"), REPLACE_EXISTING);

       System.out.println("Is our file left on the desktop?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));

       System.out.println("Has our file been moved to testDirectory?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt")));

       //remove file
       Files.delete(testFile1);
       System.out.println("Does the file still exist?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt")));
   }
}
Files.createFile()Bu ýerde ilki bilen iş stolunda bir faýl (usul) döredýäris , soňra ol ýerde bukja (usul Files.createDirectory()) döredýäris. Ondan soň faýly (usuly Files.move()) iş stolundan bu täze bukja geçirýäris we ahyrynda faýly (usuly Files.delete()) pozýarys. Konsol çykyşy: Faýl üstünlikli döredildimi? dogry Katalog üstünlikli döredildimi? dogry Faýlymyz henizem iş stolunda barmy? false Faýlymyz testDirectory-a geçirildi? dogry Faýl barmy? ýalan Üns beriň:Interfeýs usullary ýaly Path, köp usullar Filesbir obýekti gaýtaryp berýärPath . Synp usullarynyň köpüsi Fileshem kabul edýär Path. Bu ýerde bir usul wepaly kömekçiňize öwrüler Paths.get()- ony işjeň ulanyň. Başga näme gyzykly Files? Köne synpyň hakykatdanam ýetmezçiligi ! FileUsulydy. copy()Leksiýanyň başynda ol hakda gürleşdik, indi onuň bilen duşuşmagyň wagty geldi!
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;

public class Main {

   public static void main(String[] args) throws IOException {

       //file creation
       Path testFile1 = Files.createFile(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt"));
       System.out.println("Was the file created successfully?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));

       // create directory
       Path testDirectory2 = Files.createDirectory(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2"));
       System.out.println("Was the directory successfully created?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2")));

       //copy the file from the desktop to the directory testDirectory2.
       testFile1 = Files.copy(testFile1, Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2\\testFile111.txt"), REPLACE_EXISTING);

       System.out.println("Is our file left on the desktop?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));

       System.out.println("Has our file been copied to testDirectory?");
       System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2\\testFile111.txt")));
   }
}
Konsol çykyşy: Faýl üstünlikli döredildimi? dogry Katalog üstünlikli döredildimi? dogry Faýlymyz henizem iş stolunda barmy? true Faýlymyz testDirectory-a göçürildimi? true Indi faýllary programma taýdan göçürip bilersiňiz! :) Emma synp size Filesdiňe faýllary dolandyrmaga däl, eýsem mazmuny bilen işlemäge hem mümkinçilik berýär. Maglumatlary bir faýla ýazmak üçin onuň bir usuly bar write()we okamak üçin - 3: çenli, read()we ikinjisine jikme-jik durup geçeris readAllBytes(). readAllLines()Näme üçin? Sebäbi gaty gyzykly gaýdyp geliş görnüşi bar - List<String>! .Agny, faýldaky setirleriň sanawyny bize gaýtaryp berýär. Elbetde, bu mazmun bilen işlemegi gaty amatly edýär, sebäbi tutuş faýl, setir boýunça, meselem, konsola yzygiderli aýlawda çykyp biler for:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

import static java.nio.charset.StandardCharsets.UTF_8;

public class Main {

   public static void main(String[] args) throws IOException {

       List<String> lines = Files.readAllLines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"), UTF_8);

       for (String s: lines) {
           System.out.println(s);
       }
   }
}
Konsol çykyşy: Ajaýyp pursady ýadymda: Sen meniň öňümde peýda bolduň, gysga wagtlyk görüş ýaly, Arassa gözelligiň zehini ýaly. Örän rahat! :) Bu aýratynlyk Java 7-de peýda boldy. Java 8-de Java-a funksional programmirlemegiň käbir elementlerini goşýan Stream API peýda boldy. Faýllar bilen işlemek üçin has baý mümkinçilikleri goşmak bilen. Biziň öňümizde bir wezipe bardygyny göz öňüne getiriň: “Nädip” sözünden başlanýan faýlda ähli setirleri tapyň, olary UPPER CASE öwüriň we konsola çykaryň. FilesJava 7-de synp ulanyp, çözgüt nähili bolardy ? Şuňa meňzeş bir zat:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import static java.nio.charset.StandardCharsets.UTF_8;

public class Main {

   public static void main(String[] args) throws IOException {

       List<String> lines = Files.readAllLines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"), UTF_8);

       List<String> result = new ArrayList<>();

       for (String s: lines) {
           if (s.startsWith("How")) {
               String upper = s.toUpperCase();
               result.add(upper);
           }
       }

       for (String s: result) {
           System.out.println(s);
       }
   }
}
Konsol çykyşy: ÇYKYJY GÖRNÜŞ, LEAŞA BEYŞ GÖRNÜŞI. Muny eden ýaly bolarys, ýöne beýle ýönekeý iş üçin kodumyz birneme ... sözli bolup çykdy öýdemok? Java 8 Stream API ulanyp, çözgüt has owadan görünýär:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {

   public static void main(String[] args) throws IOException {

       Stream<String> stream = Files.lines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"));

       List<String> result  = stream
               .filter(line -> line.startsWith("How"))
               .map(String::toUpperCase)
               .collect(Collectors.toList());
       result.forEach(System.out::println);
   }
}
Şol bir netijä geldik, ýöne has az kod bilen! Mundan başga-da, “okalýanlygy” ýitirdik diýip bolmaz. Akym API bilen tanyş bolmasaňyzam, bu koduň edýän zatlaryna aňsatlyk bilen teswir berip bilersiňiz diýip pikir edýärin. Shortöne gysgaça aýdanyňda, akym dürli funksiýalary ýerine ýetirip boljak elementleriň yzygiderliligidir. Akym obýektini usuldan alýarys Files.lines()we oňa 3 funksiýa ulanýarys:
  1. Usuly ulanyp, filter()“Nädip” bilen başlaýan faýldan diňe şol setirleri saýlaýarys.

  2. Usuly ulanyp, saýlanan hatarlaryň hemmesinden geçýäris map()we olaryň hersini UPPER CASE çenli azaldýarys.

  3. Netijeli setirleriň hemmesini birleşdirýäris List.collect()

Çykyşda-da şol bir netijäni alýarys: ÇYKYŞ GÖRNÜŞI, Päk gözelligiň GENIUSY ýaly. Bu kitaphananyň mümkinçilikleri barada has giňişleýin öwrenmek isleseňiz, bu makalany okamagyňyzy maslahat berýäris . Goýunlarymyza, ýagny faýllara dolanarys :) Şu gün göz öňünde tutjak iň soňky mümkinçiligimiz faýl agajyndan geçmekdir . Döwrebap operasiýa ulgamlarynda faýl gurluşy köplenç agaç görnüşini alýar: onuň kökü bar we beýleki şahalary bölüp bilýän şahalary we ş.m. Kataloglar kök we şahalaryň roluny ýerine ýetirýär. Mysal üçin, “ C: // ” katalogy kök bolup biler . Iki şahasy ondan çykýar: “ C: // süklemeler ” we “ C: // Ulanyjylar ”. Bu şahalaryň hersinden ýene 2 şahasy bar: “ C: // süklemeler / Suratlar ”, “ C: // süklemeler / Wideo ”, “ C: // Ulanyjylar / JonSmit ”, “ C: // Ulanyjylar / Pudge2005 ” . Beýleki şahalar bu şahalardan we ş.m. - agaç şeýle bolýar. Linux-da birmeňzeş görünýär, diňe şol ýerde katalog kök ýaly hereket edýär / Faýllar, ýol - 2 Indi biziň bir wezipämiziň bardygyny göz öňüne getiriň: kök katalogy bilmek bilen, içinden geçmeli, ähli derejeleriň bukjalaryna göz aýlamaly we mazmuny bolan faýllary tapmaly bize gerek. “Bu bize gerek faýl!” Setirini öz içine alýan faýllary gözläris. Biziň kök katalogymyz iş stolunda ýerleşýän “testFolder” bukjasy bolar. Içinde aşakdaky mazmun bar: Faýllar, ýol - 31-nji we 1-nji derejeli bukjalaryň içinde bukjalar hem bar: Faýllar, ýol - 4Faýllar, ýol - 5Bu “ikinji derejeli bukjalaryň” içinde başga bukjalar ýok, diňe aýratyn faýllar: Faýllar, ýol - 6Faýllar, ýol - 7Biz mazmuny bilen 3 faýly ýörite belläris düşnükli atlar bilen zerur - FileWeNeed1.txt, FileWeNeed2.txt, FileWeNeed3.txt Bular Java ulanyp mazmun bilen tapmaly. Muny nädip edip bileris? Faýl agajyndan geçmegiň gaty güýçli usuly kömege gelýär - Files.walkFileTree(). Ine, etmeli zatlarymyz. Ilki bilen bize zerur FileVisitor. FileVisitorfaýl agajyndan geçmegiň ähli usullaryny beýan edýän ýörite interfeýsdir. Hususan-da, faýlyň mazmunyny okamak we zerur tekstiň bardygyny ýa-da ýokdugyny barlamak üçin logika goýarys. Bu biziňki bolar FileVisitor:
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.List;

public class MyFileVisitor extends SimpleFileVisitor<Path> {

   @Override
   public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {

       List<String> lines = Files.readAllLines(file);
       for (String s: lines) {
           if (s.contains("This is the file we need")) {
               System.out.println("Required file found!");
               System.out.println(file.toAbsolutePath());
               break;
           }
       }

       return FileVisitResult.CONTINUE;
   }
}
Bu ýagdaýda synpymyz miras alýar SimpleFileVisitor. Bu, ýerine ýetirýän synp FileVisitor, onda diňe bir usuly ýok etmeli : visitFile(). Bu ýerde her katalogdaky her faýl bilen näme edilmelidigini düşündirýäris. Has çylşyrymly gezelenç logikasy gerek bolsa, öz durmuşa geçirişiňizi ýazmaly FileVisitor. Şol ýerde ýene 3 usuly durmuşa geçirmeli bolarsyňyz:
  • preVisitDirectory()- bukja girmezden ozal ýerine ýetirilmeli logika;

  • visitFileFailed()- faýla girmek mümkin däl bolsa näme etmeli (giriş ýa-da başga sebäpler ýok);

  • postVisitDirectory()- bukja girenden soň ýerine ýetirilmeli logika.

Bizde beýle logika ýok, şonuň üçin bu bize ýeterlik SimpleFileVisitor. Usulyň içindäki logika visitFile()gaty ýönekeý: faýldan ähli setirleri okaň, zerur mazmunyň bardygyny ýa-da ýokdugyny barlaň, eger şeýle bolsa, konsola barýan ýoly çap ediň. Size kynçylyk döredip biljek ýeke-täk setir şu:
return FileVisitResult.CONTINUE;
Aslynda hemme zat ýönekeý. Bu ýerde, faýl girizilenden we ähli zerur amallar gutarandan soň programmanyň näme etmelidigini düşündirýäris. Biziň ýagdaýymyzda, agajyň üstünden geçmegi dowam etdirmeli, şonuň üçin bu ýoly saýlaýarys CONTINUE. Weöne, mysal üçin, başga bir wezipämiz bolup biler: "Bu bize gerek faýl" -y öz içine alýan faýllaryň hemmesini däl-de, diňe bir faýly tapmak . Ondan soň programma ýatyrylmaly. Bu ýagdaýda kodumyz edil birmeňzeş görüner, ýöne arakesmäniň ýerine; eder:
return FileVisitResult.TERMINATE;
Bolýar, kodumyzy işledeliň we işleýändigini göreliň.
import java.io.IOException;
import java.nio.file.*;

public class Main {

   public static void main(String[] args) throws IOException {

       Files.walkFileTree(Paths.get("C:\\Users\\Username\\Desktop\\testFolder"), new MyFileVisitor());
   }
}
Konsol çykyşy: Gerekli faýl tapyldy! C: \ Ulanyjylar \ Ulanyjy ady \ Iş stoly \ testFolder \ FileWeNeed1.txt Gerekli faýl tapyldy! C: \ Ulanyjylar \ Ulanyjy ady \ Iş stoly \ testFolder \ level1-a \ level2-aa \ FileWeNeed2.txt Gerekli faýl tapyldy! C: \ Ulanyjylar \ Ulanyjy ady \ Iş stoly \ testFolder \ level1-b \ level2-bb \ FileWeNeed3.txt Ajaýyp, muny etdik! :) Bu barada has giňişleýin bilmek isleseňiz , bu makalanywalkFileTree() size maslahat berýärin . Şeýle hem kiçi bir işi ýerine ýetirip bilersiňiz - ony adaty ýerine çalşyp bilersiňiz , ähli 4 usuly durmuşa geçiriň we bu maksatnama üçin bir maksat edinip bilersiňiz. Mysal üçin, ähli hereketleriňizi hasaba aljak bir programma ýazyp bilersiňiz: faýlyň ýa-da bukjanyň adyny girmezden ozal / soň konsolda görkeziň. Bularyň hemmesi - soňrak görüşeris! :) SimpleFileVisitorFileVisitor
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION