JavaRush /Блоги Java /Random-TG /Файлҳои Java, Роҳ

Файлҳои Java, Роҳ

Дар гурӯҳ нашр шудааст
Салом! Имрӯз мо дар бораи кор бо файлҳо ва директорияҳо сӯҳбат хоҳем кард. Шумо аллакай медонед, ки чӣ тавр мундариҷаи файлҳоро идора кунед: мо дарсҳои зиёдеро ба ин бахшида будем :) Ман фикр мекунам, ки шумо метавонед якчанд дарсҳоро, ки барои ин мақсадҳо заруранд, ба осонӣ дар хотир доред. Дар лексияи имрӯза мо махсусан дар бораи идоракунии файлҳо - эҷод, тағир додани ном ва ғайра сӯҳбат хоҳем кард. Пеш аз Java 7, ҳама чунин амалиётҳо бо истифода аз File. Шумо метавонед дар бораи кори ӯ дар ин ҷо бихонед . Аммо дар Java 7, созандагони забон тасмим гирифтанд, ки тарзи кор бо файлҳо ва директорияҳоро тағир диҳанд. Ин аз он сабаб буд, ки синф Fileяк катор камбудихо дошт. Масалан, он усуле надошт copy(), ки ба шумо имкон медиҳад, ки файлро аз як макон ба ҷои дигар нусхабардорӣ кунед (хусусияти зоҳиран зарурӣ). Илова бар ин, синф Fileусулҳои зиёде дошт, ки boolean- арзишҳоро бармегардонанд. Агар хатогӣ рух диҳад, чунин усул ба ҷои партофтани истисно баргардонидани дурӯғро бармегардонад, ки ташхиси хатогиҳо ва муайян кардани сабабҳои онҳоро хеле душвор мегардонад. Ба чои як синф Fileто 3 синф пайдо шуд: Paths, Pathва Files. Хуб, дақиқ гӯям, Pathин интерфейс аст, на синф. Биёед бифаҳмем, ки онҳо аз ҳамдигар чӣ гуна фарқ мекунанд ва чаро ҳар кадоми онҳо лозиманд. Биёед бо осонтарин чизе оғоз кунем - Paths.

Роҳҳо

Pathsяк синфи хеле содда бо усули ягонаи статикӣ мебошад get(). Он танҳо барои ба даст овардани an objectи намуд аз сатри гузашта ё URI сохта шудааст Path. Он ягон вазифаи дигар надорад. Инак як мисол аз кори ӯ:
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");
   }
}
Синфи душвортарин нест, дуруст? :) Хуб, азбаски мо an objectи типро гирифтем Path, биёед бифаҳмем, ки он чист Pathва чаро он лозим аст :)

Роҳ

Path, ба таври васеъ, аналоги аз нав тарҳрезии File. Кор кардан бо он назар ба бо он хеле осонтар аст File. Аввалан , бисёре аз усулҳои коммуналӣ (статикӣ) аз он хориҷ карда шуданд ва ба синф гузаронида шуданд Files. Дуюм , Pathарзишҳои баргардонидани усулҳо фармоиш дода шуданд. Дар синф Fileусулҳо ин String, он boolean, киро баргардонданд File- фаҳмидани он осон набуд. Масалан, усуле вуҷуд дошт getParent(), ки роҳи волидайнро барои файли ҷорӣ ҳамчун сатр баргардонд. Аммо дар айни замон усуле вуҷуд дошт getParentFile(), ки ҳамон чизеро баргардонд, аммо дар шакли an object File! Ин бешубҳа зиёдатист. Аз ин рӯ, дар интерфейс, Pathусул getParent()ва дигар усулҳои кор бо файлҳо танҳо an objectро бармегардонанд Path. Ҳеҷ гуна вариантҳо нест - ҳама чиз осон ва оддӣ аст. Он чӣ гуна усулҳои муфид дорад Path? Инҳоянд чанде аз онҳо ва намунаҳои корашон:
  • getFileName()— номи файлро аз роҳ бармегардонад;

  • getParent()— директорияи «волид»-ро нисбат ба роҳи ҷорӣ бармегардонад (яъне директорияе, ки дар дарахти директория болотар аст);

  • getRoot()— директорияи «реша»-ро бар мегардонад; яъне он чизе, ки дар болои дарахти директория ҷойгир аст;

  • startsWith(), endsWith()— санҷед, ки оё роҳ бо роҳи гузашта оғоз мешавад/анҷом меёбад:

    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);
       }
    }

    Натиҷаи консол:

    testFile.txt
    C:\Истифодабарандагон\Номи корбар\Desktop
    C:\
    true
    false

    Диққат диҳед, ки усул чӣ гуна кор мекунад endsWith(). Он тафтиш мекунад, ки оё роҳи ҷорӣ бо роҳи гузашта анҷом меёбад . Он дар роҳ аст , на дар маҷмӯи аломатҳо .

    Натиҷаҳои ин ду зангро муқоиса кунед:

    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"));
       }
    }

    Натиҷаи консол:

    дурӯғ
    рост

    Шумо бояд роҳи пурраи методро гузаронед endsWith(), на танҳо маҷмӯи аломатҳо: дар акси ҳол натиҷа ҳамеша нодуруст хоҳад буд , ҳатто агар роҳи ҷорӣ воқеан бо чунин пайдарпаии аломатҳо хотима ёбад (ба мисли “estFile.txt” ” дар мисоли боло).

    Илова бар ин, як гурӯҳи усулҳо мавҷуданд, ки кор бо роҳҳои мутлақ (пурра) ва нисбӣ содда мекунандPath .

Биёед ба ин усулҳо назар андозем:
  • boolean isAbsolute()ҳақиқӣ бар мегардонад , агар роҳи ҷорӣ мутлақ бошад:

    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());
       }
    }

    Натиҷаи консол:

    дуруст

  • Path normalize()— рохи чориро «муътадил мегардонад», аз он элементхои нолозимро нест мекунад. Шумо метавонед бидонед, ки системаҳои оператсионии маъмул ҳангоми нишон додани роҳҳо аксар вақт аломатҳои "." -ро истифода мебаранд. («Феҳристи ҷорӣ») ва «..» (феҳристи волидайн). Масалан: “ ./Pictures/dog.jpg ” маънои онро дорад, ки дар директорияи ҳозираи мо папкаи тасвирҳо мавҷуд аст ва дар он файли “dog.jpg” мавҷуд аст.

    Пас, ин ҷост. Агар барномаи шумо роҳе дошта бошад, ки "." -ро истифода мебарад. ё "..", усул normalize()онҳоро нест мекунад ва роҳеро ба даст меорад, ки онҳоро дар бар намегирад:

    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());
       }
    }

    Натиҷаи консол:

    C: \ Users \ Java \ мисолҳо
    C: \ Users \ мисолҳо

  • Path relativize()— рохи нисбии байни рохи чорй ва гузаштаро хисоб мекунад.

    Барои намуна:

    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));
       }
    }

    Натиҷаи консол:

    Номи корбар\Desktop\testFile.txt

Рӯйхати пурраи усулҳо Pathхеле калон аст. Шумо метавонед ҳамаи онҳоро дар ҳуҷҷатҳои Oracle пайдо кунед . Мо ба баррасӣ мегузарем Files.

Файлҳо

Files- ин синфи утorтест, ки дар он усулҳои статикӣ аз синф кӯчонида шудаанд File. Files- ин тақрибан якхела бо Arraysё аст Collections, танҳо бо файлҳо кор мекунад, на бо массивҳо ва коллексияҳо :) Он ба идоракунии файлҳо ва директорияҳо нигаронида шудааст. Бо истифода аз усулҳои статикӣ Files, мо метавонем файлҳо ва директорияҳоро эҷод, нест ва интиқол диҳем. Барои ин амалҳо усулҳо истифода мешаванд createFile()(барои директорияҳо - createDirectory()), move()ва delete(). Ин аст тарзи истифода бурдани онҳо:
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()) эҷод мекунем, баъд дар он ҷо папка эҷод мекунем (метод Files.createDirectory()). Баъд аз ин, мо файлро (метод Files.move()) аз мизи корӣ ба ин папкаи нав мегузорем ва дар охир файлро (метод Files.delete()) нест мекунем. Натиҷаи консол: Оё файл бомуваффақият офарида шудааст? true Оё директория бомуваффақият сохта шуд? true Оё файли мо ҳоло ҳам дар мизи корӣ ҳаст? false Оё файли мо ба testDirectory интиқол дода шудааст? true Оё файл то ҳол вуҷуд дорад? дурӯғ Диққат диҳед:Мисли усулҳои интерфейс Path, бисёр усулҳо Filesan objectро бармегардонандPath . Аксар усулҳои синф Filesниз қабул мекунанд Path. Дар ин ҷо як усул ёрдамчии содиқи шумо мегардад Paths.get()- онро фаъолона истифода баред. Боз чӣ ҷолиб аст Files? Он чизе ки синфи кӯҳна дар ҳақиқат намерасид, Fileусули copy()! Мо дар ибтидои лекция дар бораи у сух-бат кардем, акнун вакти вохУрй аст!
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")));
   }
}
Натиҷаи консол: Оё файл бомуваффақият офарида шудааст? true Оё директория бомуваффақият сохта шуд? true Оё файли мо ҳоло ҳам дар мизи корӣ ҳаст? true Оё файли мо ба testDirectory нусхабардорӣ карда шуд? true Акнун шумо метавонед файлҳоро ба таври барномавӣ нусхабардорӣ кунед! :) Аммо синф Filesба шумо имкон медиҳад, ки на танҳо худи файлҳоро идора кунед, балки бо мундариҷаи он кор кунед. Барои навиштани маълумот ба файл, он дорои усули write(), ва барои хондан - то 3:, read()ва readAllBytes()Мо readAllLines() дар бораи охирин ба таври муфассал истода. Чаро дар он? Зеро он намуди хеле ҷолиби бозгашт дорад - List<String>! Яъне он ба мо рӯйхати сатрҳои файлро бармегардонад. Албатта, ин кор бо мундариҷаро хеле қулай мегардонад, зеро тамоми файл, сатр ба сатр, метавонад, масалан, дар як даври муқаррарӣ ба консол бароварда шавад 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);
       }
   }
}
Баромади консол: Як лахзаи ачоиб ба ёдам меояд: Ту пеши ман пайдо шудй, Чун диди зудгузар, Чу нобигаи зебоии пок. Хеле бароҳат! :) Ин хусусият дар Java 7 пайдо шуд. Дар Java 8 Stream API пайдо шуд , ки ба Java баъзе унсурҳои барномасозии функсионалӣ илова кард. Аз ҷумла имкониятҳои бойтар барои кор бо файлҳо. Тасаввур кунед, ки мо вазифа дорем: ҳамаи сатрҳоро дар файле, ки бо калимаи "Чӣ тавр" оғоз мешавад, пайдо кунед, онҳоро ба ҲАРФИ БАЛОН табдил диҳед ва онҳоро ба консол бароред. Ҳалли бо истифода аз синф Filesдар Java 7 чӣ гуна хоҳад буд? Чизе монанди ин:
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);
       }
   }
}
Баромади консол: МИСЛИ РӮЗАИ РӮЗА, МИСЛИ НОХИЯИ ЗЕБОТИ ПОК. Мо гуё ин корро карда бошем, вале шумо фикр намекунед, ки барои чунин кори оддй codeи мо андаке... мухтасар шуд? Истифодаи Java 8 Stream API ҳалли хеле зеботар менамояд:
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);
   }
}
Мо ба ҳамон натиҷа ноил шудем, аммо бо рамзи хеле камтар! Гузашта аз ин, наметавон гуфт, ки мо дар «хонданӣ» аз даст додаем. Ман фикр мекунам, ки шумо метавонед ба осонӣ шарҳ диҳед, ки ин code чӣ кор мекунад, ҳатто агар шумо бо Stream API ошно набошед. Аммо дар кӯтоҳ, Ҷараён пайдарпайии унсурҳост, ки шумо метавонед дар онҳо вазифаҳои гуногунро иҷро кунед. Мо an objectи Stream-ро аз усул мегирем Files.lines()ва сипас ба он 3 функсияро татбиқ мекунем:
  1. Бо истифода аз усул, filter()мо аз файл танҳо он сатрҳоро интихоб мекунем, ки бо "Чӣ тавр" оғоз мешаванд.

  2. Мо бо истифода аз усул ҳамаи сатрҳои интихобшударо мегузарем map()ва ҳар яки онҳоро ба ҲАРФИ КАЛОН кам мекунем.

  3. Мо ҳамаи сатрҳои ҳосилшударо барои Listистифодаи collect().

Дар баромадгох мо як хел натича мегирем: МИСЛИ РУЗАИ РУЗА, МИСЛИ НОХИЯИ ЗЕБОТИ ПОК. Агар шумо ба маълумоти бештар дар бораи имкониятҳои ин китобхона таваҷҷӯҳ дошта бошед, мо тавсия медиҳем, ки ин мақоларо хонед . Мо ба гӯсфандони худ бармегардем, яъне файлҳо :) Имконияти охирине, ки мо имрӯз баррасӣ хоҳем кард, аз дарахти файл гузаштан аст . Сохтори файлӣ дар системаҳои оператсионии муосир бештар шакли дарахтро мегирад: он реша дорад ва шохаҳое ҳастанд, ки аз онҳо шохаҳои дигарро ҷудо кардан мумкин аст ва ғ. Директорияҳо нақши реша ва шохаҳоро мебозанд. Масалан, директорияи " C:// " метавонад ҳамчун реша амал кунад . Аз он ду шоха ҷудо мешаванд: " C://Downloads " ва " C://Users ". Аз ҳар яке аз ин фorалҳо боз 2 шохаи дигар мавҷуданд: “ C://Downloads/Pictures ”, “ C://Downloads/Video ”, “ C://Users/JohnSmith ”, “ C://Users/Pudge2005 ” . Аз ин шохахо дигар шохахо чудо мешаванд ва гайра. — дарахт хамин тавр мешавад. Дар Linux он тақрибан якхела аст, танҳо дар он ҷо директория ҳамчун решавӣ амал мекунад / Файлҳо, роҳ - 2 Акнун тасаввур кунед, ки мо вазифа дорем: бо донистани директорияи реша, мо бояд онро аз назар гузаронем, ба ҷузвдонҳои ҳама сатҳҳо назар андозем ва дар онҳо файлҳои дорои мундариҷаро пайдо кунем. ба мо лозим аст. Мо файлҳоеро ҷустуҷӯ хоҳем кард, ки дорои сатри "Ин файлест, ки ба мо лозим аст!" Феҳристи решаи мо ҷузвдони "testFolder" хоҳад буд, ки дар мизи корӣ ҷойгир аст. Дар дохor он мундариҷаи зерин мавҷуд аст: Файлҳо, роҳ - 3Дар дохor ҷузвдонҳои level1-a ва level1-b инчунин ҷузвдонҳо мавҷуданд: Файлҳо, роҳ - 4Файлҳо, роҳ - 5Дар дохor ин "папкаҳои сатҳи дуюм" дигар ҷузвдонҳо нестанд, танҳо файлҳои инфиродӣ: Файлҳо, роҳ - 6Файлҳо, роҳ - 7Мо 3 файлро бо мундариҷаи махсус таъин мекунем. лозим бо номҳои равшан - FileWeNeed1.txt , FileWeNeed2.txt, FileWeNeed3.txt Инҳоянд, ки мо бояд аз рӯи мундариҷа бо истифода аз Java пайдо кунем. Мо инро чӣ тавр карда метавонем? Усули хеле пурқуввати тай кардани дарахти файл ба наҷот меояд - Files.walkFileTree(). Ин аст, ки мо бояд чӣ кор кунем. Аввалан, ба мо лозим аст FileVisitor. FileVisitorинтерфейси махсусест, ки тамоми усулҳои гузариш аз дарахти файлро тавсиф мекунад. Махсусан, мо мантиқро дар он ҷо мегузорем, то мундариҷаи файлро хонем ва тафтиш кунем, ки оё он матни ба мо лозимиро дар бар мегирад. Ин аст он чизе ки мо чунин хоҳад буд 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;
   }
}
Дар ин маврид синфи мо аз SimpleFileVisitor. Ин синфест, ки -ро амалӣ мекунад FileVisitor, ки дар он шумо бояд танҳо як усулро бекор кунед: visitFile(). Дар ин ҷо мо тавсиф мекунем, ки бо ҳар як файл дар ҳар як директория чӣ кор кардан лозим аст. Агар ба шумо мантиқи гузариши мураккабтар лозим бошад, шумо бояд татбиқи худро нависед FileVisitor. Дар он ҷо ба шумо лозим меояд, ки 3 усули дигарро татбиқ кунед:
  • preVisitDirectory()— мантике, ки бояд пеш аз дохил шудан ба папка ичро карда шавад;

  • visitFileFailed()— чӣ бояд кард, агар ворид кардани файл имконнопазир бошад (дастрасӣ ё дигар сабабҳо);

  • postVisitDirectory()— мантиқе, ки бояд пас аз ворид кардани ҷузвдон иҷро шавад.

Мо чунин мантиқ надорем, бинобар ин барои мо басанда аст SimpleFileVisitor. Мантиқ дар дохor усул visitFile()хеле содда аст: ҳама сатрҳоро аз файл хонед, санҷед, ки оё онҳо мундариҷаи лозимиро дар бар мегиранд ва агар ин тавр бошад, роҳи мутлақро ба консол чоп кунед. Ягона хате, ки метавонад ба шумо душворӣ диҳад, ин аст:
return FileVisitResult.CONTINUE;
Дар асл, ҳама чиз оддӣ аст. Дар ин ҷо мо танҳо тавсиф мекунем, ки барнома пас аз ворид кардани файл ва анҷом додани ҳама амалҳои зарурӣ чӣ кор кунад. Дар ҳолати мо, мо бояд тай кардани дарахтро идома диҳем, бинобар ин мо вариантро интихоб мекунем CONTINUE. Аммо, масалан, мо метавонем вазифаи дигаре дошта бошем: пайдо кардани на ҳама файлҳое, ки дорои "Ин файлест, ки ба мо лозим аст", балки танҳо як файли . Пас аз ин, барнома бояд қатъ карда шавад. Дар ин ҳолат, рамзи мо айнан якхела хоҳад буд, аммо ба ҷои шикаст; хоҳад кард:
return FileVisitResult.TERMINATE;
Хуб, биёед codeи худро иҷро кунем ва бубинем, ки оё он кор мекунад.
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());
   }
}
Натиҷаи консол: Файли зарурӣ ёфт шуд! C:\Users\Номи корбар\Desktop\testFolder\FileWeNeed1.txt Файли лозима ёфт шуд! C:\Users\Номи корбар\Desktop\testFolder\level1-a\level2-aa\FileWeNeed2.txt Файли зарурӣ ёфт шуд! C:\Users\Номи корбар\Desktop\testFolder\level1-b\level2-bb\FileWeNeed3.txt Аҷоиб, мо ин корро кардем! :) Агар шумо хоҳед, ки дар бораи он маълумоти бештар гиред walkFileTree(), ман ба шумо ин мақоларо тавсия медиҳам . Шумо инчунин метавонед як вазифаи хурдро иҷро кунед - онро SimpleFileVisitorбо як кори муқаррарӣ иваз кунед FileVisitor, ҳамаи 4 усулро татбиқ кунед ва ҳадафи ин барномаро муайян кунед. Масалан, шумо метавонед барномаеро нависед, ки ҳамаи амалҳои шуморо сабт кунад: номи файл ё ҷузвдонро дар консол пеш/пас аз ворид кардани онҳо нишон диҳед. Ин ҳама - баъд вохӯрем! :)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION