четверг, 26 января 2012 г.
Oracle. Администрирование и разработка.: Деление на ноль? Легко!
Oracle. Администрирование и разработка.: Деление на ноль? Легко!: Q: can oracle divide by zero? A: no Q: are you absolutely sure? A: yes Q: then why does this work? select 1 from dual where exists (sel...
среда, 25 января 2012 г.
setEncoding для java.util.zip
Как известно у методов замечательного стандартного пакета java.util.zip нет возможности указывать кодировку файлов. И вообще для работы с архивами лучше ипользовать сторонние специализированные библиотеки, как например Apache Commons Compress.
Но, если код (или его часть) уже написаны под java.util.zip, то можно воспользоваться пакетом для работы с архивами, входящим в состав бинарников Apache Ant. В пакете org.apache.tools.zip содержаться классы аналогичные java.util.zip, но исправленные (в частности содержится setEncoding), практически все имена и методы классов совпадают.
1) Скачиваем последнюю версию бинарника Appache Ant;
2) Достаем из папки lib файл ant.jar;
3) "Выковыриваем" все "ненужные" нам пакеты из папки org, оставляем на месте только файлы в папке /org/apache/tools/zip;
4) Подключаем jar-файл к своему проекту вместо java.util.zip;
5) В моем коде пришлось только изменить метод Entries на getEntries;
6) Теперь при создании экземпляра ZipFile вторым параметром можно указать кодировку.
Вот небольшой пример:
Лично я использовал этот пакет в хранимых java процедурах Oracle, предварительно загрузив jar-файл в базу с помощью loadjava.
И, само собой, при распространении своей программы с использованием этой библиотеки не забываем о соблюдении условий, выдвигаемых лицензией Apache.
Но, если код (или его часть) уже написаны под java.util.zip, то можно воспользоваться пакетом для работы с архивами, входящим в состав бинарников Apache Ant. В пакете org.apache.tools.zip содержаться классы аналогичные java.util.zip, но исправленные (в частности содержится setEncoding), практически все имена и методы классов совпадают.
1) Скачиваем последнюю версию бинарника Appache Ant;
2) Достаем из папки lib файл ant.jar;
3) "Выковыриваем" все "ненужные" нам пакеты из папки org, оставляем на месте только файлы в папке /org/apache/tools/zip;
4) Подключаем jar-файл к своему проекту вместо java.util.zip;
5) В моем коде пришлось только изменить метод Entries на getEntries;
6) Теперь при создании экземпляра ZipFile вторым параметром можно указать кодировку.
Вот небольшой пример:
import java.io.*;
import java.util.Enumeration;
import org.apache.tools.zip.*;
public class ZipUtil {
private static String ZIPENCODE = "CP866";
public static final void unzip(String extractFrom, String extractTo)
throws IOException {
File extractFromFile = new File(extractFrom);
File extractToFile = new File(extractTo);
ZipFile archive = new ZipFile( extractFromFile, ZIPENCODE);
Enumeration e = archive.getEntries();
while (e.hasMoreElements()) {
ZipEntry entry = (ZipEntry) e.nextElement();
File file = new File(extractToFile, entry.getName());
if (!entry.isDirectory()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
InputStream in = archive.getInputStream(entry);
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(file));
byte[] buffer = new byte[8192];
int read;
while (-1 != (read = in.read(buffer))) {
out.write(buffer, 0, read);
}
in.close();
out.close();
}
}
}
}
Лично я использовал этот пакет в хранимых java процедурах Oracle, предварительно загрузив jar-файл в базу с помощью loadjava.
И, само собой, при распространении своей программы с использованием этой библиотеки не забываем о соблюдении условий, выдвигаемых лицензией Apache.
Подписаться на:
Комментарии (Atom)