Интерфейс пути
1. Путь представляет последовательность имен каталогов, за которой следует имя файла. Когда первым компонентом в пути является корневой компонент, это абсолютный путь, такой как / или C: / и корневой компонент, допустимый доступ, зависит от файловой системы;
2. Путь, начинающийся с корневого компонента, является абсолютным путем, в противном случае это относительный путь;
3. Статический метод. Затем проанализируйте подключенные результаты. Если это не юридический путь, будет выброшено исключение InvalidPatexception, в противном случае будет возвращен объект пути;
// Предположим, что это путь файловой системы Unix Absolute = paths.get ("/home", "cat"); // абсолютный путь пути относительно = pahts.get ("ixenos", "config", "user.properties"); // относительный путь4. Получите объект пути из пути строки
GET может также получить целый путь (то есть одна строка, состоящая из нескольких компонентов), например, прочитать путь из файла конфигурации:
String foundir = properties.getProperty ("base.dir"); // можно получить/opt/ixenos или c:/program files/ixenos path basepath = paths.get (basedir);5. Комбинирование или проанализирование
1) Вызов P.Resolve (Q) вернет путь в соответствии со следующими правилами: если Q - абсолютный путь, возврат Q, в противном случае добавленный путь вернет P/Q или P/Q
PATH WorkereLative = paths.get ("work"); Path WorkPath = basePath.Resolve (WorkLelectial); // разрешение также может принять пути строковых параметров PAMEPATH = BASEPATH.RESOLVE («Работа»);2) Вызов P.Resolvesibling ("Q") разрешит родительский путь o указанного пути P и генерирует путь родного брата O/Q
PATH TEMPTATH = WorkPath.Resolvesibling («TEMP»); / * Если рабочая папа/opt/ixenos/work, тогда/opt/ixenos/temp будет создан */
3) Вызов P.Relativize (r) будет генерировать избыточный путь q. Расположение Q будет генерировать относительный путь r. В конце концов, R не содержит пути пересечения с p.
/* patha Is/home/histy pathb Is/home/ixenos/config теперь patha имеет релятивизированный PathB, который генерирует избыточный путь*/path pathc = patha.relativize (pathb); // В настоящее время Pathc IS ../IXENOS/Config/* Метод нормализации удалит избыточную часть*/path pathd = pathc.normalize (); // pathd Is/ixenos/config
4) Toabsolutepath будет создавать абсолютный путь данного пути, начиная с корневого компонента
5) Класс пути также имеет некоторые полезные методы для отключения и объединения путей, таких как GetParent, GetFilename, GetRoot // Получить корневой каталог
6) Путь имеет метод Tofile для борьбы с устаревшими классами файлов, а класс файлов также имеет метод Topath
Файлы класс инструментов
1. Читать и записать файлы
Подпись метода:
Статический путь написать (путь пути, байт [] байты, openoption ... опции)
Статический путь написать (путь пути, итерабильный <? Расширение ChareSequence> Lines, OpenOption ... опции)
Вот только методы, используемые ниже. Для получения дополнительных методов см. Документацию API ...
Среди них OpenOption - это интерфейс NIO, StandardOpenoption - это класс реализации перечисления. Пожалуйста, проверьте документацию API для каждой функции экземпляра перечисления.
/* Простой метод, предоставленный файлами, подходит для обработки текстовых файлов средней длины. Если обрабатывается файл, большой или двоичный, то вам все равно следует использовать классический поток io*/// Прочитать все содержимое файла в байт массив Byte [] bytes = files.readallbytes (path); // Передай в объект пути // После этого вы можете создать строку в соответствии с набором символов String Content = new String (Bytes, charset); // Вы также можете прочитать ее непосредственно в виде последовательности строки в список <string> line = files.readalllines (path, charset); // На противоположность, вы также можете записать строку в файл, который для переопределения файлов. // Пауза байт [] // Приложение содержимого, определить функции приложения, такие как добавление на основе файлов параметров. Write (path, content.getbytes (charset), standardopenoption.append); // Приостановите объект перечисления и включите переключатель Adpend // Записать список сбора строки строки в файлы файлов.
2. Скопировать, вырезать, удалить
Подпись метода:
Статический путь копию (источник пути, цель пути, копиопция ... параметры)
Статическое движение пути (источник пути, цель пути, копиопция ... параметры)
Статическая пустота Удалить (путь пути) // Если путь не существует, будет брошено исключение. Лучше позвонить следующему в это время
статические логические Deleteifexists (путь пути)
Вот только методы, используемые ниже. Для получения дополнительных методов см. Документацию API ...
Среди них копипиопция является интерфейсом NIO, StandardCopyOption - это класс реализации перечисления. Пожалуйста, проверьте документацию API для каждой функции экземпляра перечисления.
Существует Atomic_move, который может быть заполнен для обеспечения атомных операций, либо движение успешно завершено, либо исходный файл хранится в его первоначальном положении.
// Копировать files.copy (fromPath, topath); // cut files.move (fromPath, topath);/* Если Topath уже существует, операция не выполняется. Если вы хотите перезаписать, вам нужно пройти в параметре replace_existing. Также скопируйте атрибуты файла, передайте в copy_attributes*/files.copy (fromPath, topath, standarcopyoption.replace_existing, standardcopyoption.copy_attributes);
3. Создание файлов и каталогов
// Создать новый каталог, за исключением последнего компонента, остальные должны быть существующими файлами. CreateDirectory (path); // Создание промежуточного каталога в пути, который может создать несуществующие файлы промежуточных компонентов. CreateDirectories (path);/* Создать пустой файл, чтобы проверить существование файла. Если это уже существует, будет брошено исключение, чтобы проверить существование файла. Следовательно, операция создания файла не может быть выполнена в процессе*/files.createfile (path); // Добавить предварительный/суффикс для создания временного файла или пути временного каталога newpath = files.createtempfile (dir, prefix, суффикс); path newpath = files.creatempdirectory (dir, prefix);
4. Получить информацию о файле
Пропустите, посмотрите на документацию API для получения подробной информации или Corejava Page51
5. Итерация над файлами в каталоге
Старый класс файлов имеет два метода для получения строкового массива, состоящего из всех файлов в каталоге, String [] list () и String [] List (FileFilter Filter), но когда каталог содержит большое количество файлов, производительность этих двух методов будет очень низкой.
Анализ причины:
1. // Список классов файлов все файлы public String [] list () {SecurityManager Security = System.getSecurityManager (); // разрешения файловой системы получают if (security! = Null) {security.checkread (path); } if (isInvalid ()) {return null; } вернуть fs.list (this); // основной вызов в списке файловой системы} // Список файловых систем абстрактного класса // Показания файловой системы определяют if (security! = Null) {security.checkread (path); } if (isInvalid ()) {return null; } вернуть fs.list (this); // основной вызов в списке файловой системы} // Список абстрактного класса файловой системы // Класс файлов определяет, что FS является частной статической конечной файловой системой, созданной статически по умолчанию filesystem fs = defaultfilesystem.getFilesyStem (); // So Let's ObsefilesStem. Defaultfilesystem { /*** Возвращает объект файловой системы для Windows Platform. */ public static файловая система getfilesystem () {return new winntfilesystem (); }} // Класс WinntFilesyStem наследует от абстрактного класса файловой системы. Здесь мы в основном наблюдаем его метод списка (файл файла) @OverridePublic Народную строку [] список (файл f);/*Мы видим, что это собственный метод, который показывает, что операция списка управляется файловой системой операционной системы. Когда каталог содержит большое количество файлов, производительность этого метода будет очень низкой. Следовательно, чтобы заменить его, класс файлов Nio разработал NewDirectoryStream (PATH DIR) и его перегруженный метод, который будет генерировать итерабильный объект (может быть итерационный FOREACH) */// ~ 2. // Вызовов обратного фильтра Public String [] List (FileNameFilter Filter) {// Использование interface Callback Spress Spress Sport (] = список ();); // Список вызова All if ((имена == null) || (filter == null)) {return names; } List <string> v = new ArrayList <> (); for (int i = 0; i <names.length; i ++) {if (filter.accep (this, names [i])) {// обращение к обращению метод принятия объекта FilenameFileTeter v.Add (names [i]); }} return v.toarray (new String [v.size ()]); }В настоящее время приходят высокие технологии - файлы получают итерабильные потоки каталогов,
Пропустите путь каталога, пройдите в каталог потомков и верните поток пути каталога. Обратите внимание, что все пути здесь являются каталогами, а не файлами!
Следовательно, класс файлов разрабатывает NewDirectoryStream (Path DIR) и его перегруженный метод, который будет генерировать итерабильный объект (может использоваться Foreach Itare)
Итерация через каталог, чтобы получить итерабильную коллекцию файлов потомков
staticDirectoryStream<Path> | newDirectoryStream(Path dir) открывает каталог, возвращая DirectoryStream для итерации по всем записям в каталоге. |
staticDirectoryStream<Path> | newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) открывает каталог, возвращая DirectoryStream для итерации над записями в каталоге. |
staticDirectoryStream<Path> | newDirectoryStream(Path dir, String glob) |
Возвращение потока каталогов можно рассматривать как коллекцию, в которой хранятся все пути, которые реализуют итерационные.
Следовательно, итераторы или фореат итерации, но при использовании итераторов будьте осторожны, чтобы не вызывать другой итератор:
В то время как DirectoryStream расширяется, он не является общим назначением, поскольку он поддерживает только один итератор; Вызывая метод итератора для получения второго или последующего броска итератора, запрещает allectstateException.
Пример:
try (DirectoryStream <Thate> intrives = files.newdirectorystream (dir)) {for (ptypt neprod: intrives) {...}}Вы можете передавать параметры глобального языка, то есть использовать режим глобуса для фильтрации файлов (вместо списка (FileFilter Filter)):
NewDirectoryStream (Path Dir, String Glob) Обратите внимание, что это тип строки
Try (DirectoryStream <Thate> intrives = files.newdirectorystream (dir, "*.java")) // {...}шаровой режим
Так называемый шаблон шаровика относится к упрощенному регулярному выражению, используемому оболочкой.
1. Звездочка* соответствует 0 или более символам в компоненте пути; например *.java соответствует всем файлам Java в текущем каталоге
2. Два звездочки ** Сопоставьте 0 или более символов по границам каталогов; Например, **. Java соответствует файлам Java во всех подкаталогах
3. Знак вопроса (?) Соответствует только одному персонажу; Например, ???? использовать ? Потому что * является подстановочным символом и не указывает число
4. [...] Чтобы соответствовать набору символов, вы можете использовать соединение [0-9] и обратный характер [! 0-9]; Например, тест [0-9a-f] .java в соответствии с testx.java, предполагаем, что x-шестнадцатеричное число, [0-9a-f]-это соответствовать одному персонажу в качестве шестнадцатеричного числа, такого как B (шестнадцатеричный-это нечувствительно).
Если вы используете Dash в квадратных скобках, чтобы разделить два символа, это означает, что все те, кто находится в диапазоне этих двух символов, может быть сопоставлена (например, [0-9] означает сопоставление всех от 0 до 9 чисел).
5. {...} Сопоставьте один из множества дополнительных параметров, разделенных запятыми; например *. {java, class} соответствует всем файлам Java и файлам классов
6./ Escoppersemans в любом из вышеуказанных шаблонов; Например, */** соответствует файлам с именами файлов во всех подкаталогах с *, вот ** Escape, которому предшествует сопоставление 0 или более символов
Ниже приведена модель глобуса, обобщенная сети:
| Шаровой режим | описывать |
|---|---|
| *.текст | Сопоставьте все файлы с расширением .txt |
| *. {html, htm} | Сопоставьте все файлы с расширениями .html или .htm. {} используется для группового режима, который разделен запятыми |
| ?.текст | Сопоставьте любой отдельный символ в качестве имени файла и расширения .txt |
| Полем | Сопоставьте все файлы с расширениями |
| C:/users/* | Сопоставьте все файлы в каталоге пользователей диска C. BackSlash "/" используется для ухода с непосредственными символами |
| /дом/** | Сопоставьте все /домашние каталоги и файлы в подкатализаторах на платформе UNIX. ** используется для сопоставления текущего каталога и всех его подкаталогов |
| [xyz] .txt | Совместите все отдельные символы в виде имен файлов, а один символ содержит только один из «X» или «y» или «z», и имеет расширение .txt. Квадратные кронштейны [] используются для указания коллекции |
| [ac] .txt | Сопоставьте все отдельные символы в виде имен файлов, а один символ содержит только один из трех типов «A» или «B» или «C», и имеет расширение .txt. Знак минус "-" используется для указания диапазона и может использоваться только в квадратных скобках [] |
| [! A] .txt | Сопоставьте все отдельные символы в виде имен файлов, и один символ не может содержать буквы «A», а расширение .txt. Восклицательный знак "!" используется для отмены |
Разве не полезно итерацию через все коллекции файлов потомков в определенном каталоге? Давай, давайте напрямую пересечь все потомки (включая каталоги и файлы) каталога.
Мы можем вызвать метод WalkFileTree класса Files и передать в объекте типа интерфейса FileVisitor (в API есть больше методов, которые вы можете обнаружить ...)
/*Передайте анонимный объект подкласса FileVisitor*/files.walkfileTree (dir, новый SimpleFilevisitor <Thap> () {// WalkFileTree обратный вызов Этот метод используется для прохождения All -потомков publicVisitresult VisitFile (Path Path, BasicfileTributes to CustomeSectore (Sersiretectore -custome Код, который не имеет ничего общего с целью WalkFileTree (Traversing All Descendant System.out.println (Path);Давайте обобщу это,
Files.newdirectorystream (path dir) возвращает итерабильную коллекцию потомков файлов после обезвреживания;
Files.walkfileTree (Path Dir, FileVisitor FV) - это процесс пересечения каталогов и файлов потомков;
Zip -файловая система
Как мы знаем выше, класс Paths будет искать пути в файловой системе по умолчанию, то есть файлов на локальном диске пользователя.
На самом деле, у нас также есть другие файловые системы, такие как zip -файловые системы.
/*Предположим, что ZipName - это имя zip -файла*/fileystem fs = fileystems.newfilesystem (paths.get (zipname), null);
Приведенный выше код создаст файловую систему на основе ZipName, которая содержит все файлы в документе ZIP.
1) Если вы знаете имя файла (тип строки), легко скопировать файл из этого документа ZIP:
Files.copy (fs.getPath (имя файла), TargetPath);
В: FS.GetPath использует файловую систему ZIP для GetPath, можно ли вызвать файловую систему по умолчанию?
A: Да. В классе FileSystem есть метод getDefault (), который возвращает объект файловой системы по умолчанию, который также может быть получен с помощью имени файла getPath.
Для конкретных целей, независимо от того, проходит ли GetPath (имя строки) или случайный доступ, перейдите, чтобы увидеть реализацию исходного кода, когда у вас есть время.
2) Чтобы перечислить все файлы в документе ZIP, вы также можете использовать WalkFileTree для прохождения дерева файлов
FileSystem fs = fileSystems.newfilesystem (paths.get (filename), nul ATTRS) Throws Exception {System.out.println (file);Приведенный выше пример Java Nio Path Path и класс файлов, работающий вместе, - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.