Задать вопрос
@SoloCheater

Как исключить файлы с определённым расширением для упаковки в ZIP-архив на языке Java?

Здравствуйте. Есть вообщем вот такой (ниже) код, настроенный на упаковку файлов/папок в ZIP-архив.
package ru.app;

import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.util.Deque;
import java.util.LinkedList;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Main {
	
	public static void pack(File directory, String to) throws IOException {
    URI base = directory.toURI();
    Deque<File> queue = new LinkedList<File>();
    queue.push(directory);
    OutputStream out = new FileOutputStream(new File(to));
    Closeable res = out;

    try {
      ZipOutputStream zout = new ZipOutputStream(out);
      res = zout;
      while (!queue.isEmpty()) {
        directory = queue.pop();
        for (File child : directory.listFiles()) {
          String name = base.relativize(child.toURI()).getPath();
          if (child.isDirectory()) {
            queue.push(child);
            name = name.endsWith("/") ? name : name + "/";
            zout.putNextEntry(new ZipEntry(name));
          } else {
            zout.putNextEntry(new ZipEntry(name));
            InputStream in = new FileInputStream(child);
            try {
              byte[] buffer = new byte[1024];
              while (true) {
                int readCount = in.read(buffer);
                if (readCount < 0) {
                  break;
                }
                zout.write(buffer, 0, readCount);
              }
            } finally {
              in.close();
            }
            zout.closeEntry();
          }
        }
      }
    } finally {
      res.close();
    }
  }
	
	public static void main(String[] args) throws IOException {
		pack(new File("C:/Test"), "C:/test.zip");
	}

}

Этот код упаковывает вообще все файлы, которые только находятся в нужной директории.
А мне нужно сделать исключение из этого, то есть не упаковывать файлы, например с расширением .dat.
Как это можно сделать?
  • Вопрос задан
  • 257 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Beshere
@Beshere
Разработчик
Смотрите String.matches(). Добавьте условие перед архивацией:

if (!name.matches(".*\\.dat(:|$).*")) {
... архивируем
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
У класса File есть методы listFiles(FileFilter filter) и listFiles(FilenameFilter filter). С их помощью можно получить список файлов по собственному фильтру.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы