Содержание
Apache Foundation по умолчанию поставляется с множеством утилит, которые мы можем использовать. В большинстве случаев мы ничего не знаем об утилите, которая существует для использования в нашей производственной среде.
В этом уроке мы рассмотрим одну из утилит, с помощью которых мы можем сжимать любой файл или каталог программным способом на Java. Другими словами, простая утилита архивов.
Зачем нам эта утилита?
Некоторое время назад я написал статью о том, как загружать файлы, используя архитектуру Spring MVC . Если у вас очень большой файл, и вы размещаете файл других пользователей в некоторых файловых системах, таких как netapp, filer и т. Д., Вы можете сжать файлы перед загрузкой. Вы можете заключить следующий код в свое приложение для достижения той же цели.
Давайте сначала проверим результат, чтобы лучше понять:
До:
После:
Давайте начнем:
- Создать класс
CrunchifyCompressArchivesUtility.java - Добавьте ниже maven зависимость к вашему проекту.
- Если у вас нет проекта Maven, выполните следующие действия .
|
1
2
3
4
5
|
< зависимость >
< groupId > org . апач . обыкновенные < / groupId >
< artifactId > commons — compress < / artifactId >
< версия > 1.9 < / версия >
< / зависимость >
|
- Мы собираемся использовать Apache Commons
compress archiversполезность TarArchiveEntryкласс представляет запись в архиве Tar. Он состоит из заголовка записи, а также файла записи. Записи могут быть созданы одним из трех способов, в зависимости от того, как они должны использоваться.TarArchiveOutputStreamкласс записывает архив tar в UNIX как OutputStream.- Сначала мы заархивируем только файл
- Также в той же программе мы будем архивировать каталог
- Мы собираемся конвертировать файл и каталог в
.zipфайл. Если ты хочешь.tarзатем просто измените код ниже. - Пожалуйста, измените путь в коде ниже
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
пакет ком . crunchify. учебные пособия ;
импорт Java . Ио. BufferedInputStream ;
импорт Java . Ио. Файл ;
импорт Java . Ио. FileInputStream ;
импорт Java . Ио. FileOutputStream ;
импорт орг . апач . Общин. компресс . архиваторы . деготь. TarArchiveEntry ;
импорт орг . апач . Общин. компресс . архиваторы . деготь. TarArchiveOutputStream ;
/ **
* @author Crunchify.com
*
* /
общественности учебный класс CrunchifyCompressArchivesUtility {
частный статический окончательный строка CRUNCHIFY_BASEDIR знак равно ;
// Выходной путь по умолчанию
частный статический окончательный строка CRUNCHIFY_PATH знак равно / Users / <имя пользователя> / Desktop / ;
// .zip или .tar по необходимости
частный статический окончательный строка РАСШИРЕНИЕ ФАЙЛА знак равно .zip ;
общественности статический недействительным main ( Строка [ ] аргументы ) {
пытаться {
// Архивный файл
crunchfyArchive ( /Users/appshah/Desktop/crunchifyTarFile.txt ) ;
log ( «Архивирование файловой задачи завершено … / n» ) ;
// Архив Каталога
crunchfyArchive ( / Users / appshah / Desktop / crunchifyTarDirectory ) ;
log ( «Архивировать задание каталога выполнено …» ) ;
} ловить ( Исключение е ) {
(войти. е . getStackTrace () ToString ());
}
}
общественности статический недействительным crunchfyArchive ( String srcPath ) бросает исключение {
Файл crunchifySourceFile знак равно новый Файл ( srcPath ) ;
// Возвращает имя файла или каталога, обозначенного этим абстрактным путем
строка crunchifyFileName знак равно crunchifySourceFile . getName ( ) ;
// Возвращает строку пути родителя этого абстрактного пути
строка crunchifyBaseFileNamePath знак равно crunchifySourceFile . getParent ( ) ;
строка DestPath знак равно crunchifyBaseFileNamePath + Файл. разделитель + crunchifyFileName + FILE_EXTENSION ;
журнал ( «Архивное местоположение:» + destPath ) ;
TarArchiveOutputStream outputStream знак равно новый TarArchiveOutputStream (
новый FileOutputStream ( новый Файл ( destPath ) ) ) ;
crunchfyArchive ( crunchifySourceFile , outputStream , CRUNCHIFY_BASEDIR ) ;
// Очищает этот выходной поток и принудительно записывает любые буферизованные выходные байты
outputStream . flush ( ) ;
// Закрывает базовый OutputStream
outputStream . закрыть ( ) ;
}
частный статический недействительным crunchfyArchive ( Файл crunchifySourceFile ,
TarArchiveOutputStream outputStream , строка crunchifyBasePath ) бросает исключение {
если ( crunchifySourceFile . isDirectory ( ) ) {
// Архив Каталога
archiveCrunchifyDirectory (crunchifySourceFile, outputStream , crunchifyBasePath ) ;
} еще {
// Архивный файл
archiveCrunchifyFile (crunchifySourceFile, outputStream , crunchifyBasePath ) ;
}
}
частный статический недействительным archiveCrunchifyDirectory ( Файл crunchifyDirectory ,
TarArchiveOutputStream outputStream , строка crunchifyBasePath ) бросает исключение {
// Возвращает массив абстрактных путей, обозначающих файлы в каталоге, обозначенном этим абстрактным путем
Файл [ ] crunchifyFiles знак равно crunchifyDirectory . listFiles ( ) ;
если ( crunchifyFiles ! знак равно ноль ) {
если ( crunchifyFiles . длина < 1 ) {
// Создаем запись только с именем. Это позволяет программисту создавать заголовок записи «вручную». файл
// установлено в ноль
TarArchiveEntry запись знак равно новый TarArchiveEntry (
crunchifyBasePath + crunchifyDirectory . getName ( ) + CRUNCHIFY_PATH ) ;
// Помещаем запись в выходной поток
outputStream . putArchiveEntry ( entry ) ;
// Закрыть запись. Этот метод ДОЛЖЕН вызываться для всех записей файла, которые содержат данные
outputStream . closeArchiveEntry ( ) ;
}
// Повторить для всех файлов
за ( Файл crunchifyFile : crunchifyFiles ) {
crunchfyArchive ( crunchifyFile , outputStream ,
crunchifyBasePath + crunchifyDirectory . getName ( ) + CRUNCHIFY_PATH ) ;
}
}
}
частный статический недействительным archiveCrunchifyFile ( Файл crunchifyFile ,
TarArchiveOutputStream outputStream , строка crunchifyDirectory ) бросает исключение {
TarArchiveEntry crunchifyEntry знак равно новый TarArchiveEntry (
crunchifyDirectory + crunchifyFile . getName ( ) ) ;
// Установить размер файла этой записи
crunchifyEntry . setSize ( crunchifyFile . length ( ) ) ;
outputStream . putArchiveEntry ( crunchifyEntry ) ;
BufferedInputStream inputStream знак равно новый BufferedInputStream (
новый FileInputStream ( crunchifyFile ) ) ;
ИНТ счетчик ;
// 512: размер буфера
байт byteData [ ] знак равно новый байт [ 512 ] ;
в то время как ( ( счетчик знак равно inputStream . читать ( byteData , 0 , 512 ) ) ! знак равно — 1 ) {
outputStream . написать ( byteData , 0 , счетчик ) ;
}
inputStream . закрыть ( ) ;
outputStream . closeArchiveEntry ( ) ;
}
// Crunchify любимая утилита журнала
частный статический недействительным log ( Строка строка ) {
Система. вне. println ( строка ) ;
}
}
|
Выход
|
1
2
3
4
5
|
Архивное местоположение : / Users / < имя пользователя > / Desktop / crunchifyTarFile . TXT. застежка — молния
Архив задача файла завершена . , ,
Архивное местоположение : / Users / < имя пользователя > / Desktop / crunchifyTarDirectory . застежка — молния
Архив Задача каталога выполнена . , ,
|
0.00 (0%) 0 votes









