Основная причина этого поста — попытка не повторяться ( СУХОЙ ), потому что часто я сталкиваюсь с рекурсивной необходимостью чтения и записи сжатых и несжатых файлов (в основном JSON и CSV).
Давайте сначала посмотрим, как читать текстовые файлы. Обратите внимание, что я работаю с (относительно небольшими) текстовыми файлами так:
- Методы чтения возвращают строку со всем содержимым.
- Я использую
BufferedReaderдля чтения построчно.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
private String readFile(String fileName) { StringBuilder sb = new StringBuilder(); try { BufferedReader input = new BufferedReader(new FileReader(new File(fileName))); try { String line = null; while ((line = input.readLine()) != null) { sb.append(line); } } finally { input.close(); } } catch (IOException ex) { // Handle exception return null; } return sb.toString();} |
Примечание: есть несколько способов сделать что-то. В записи Лучший способ чтения текстового файла , где вы можете найти много разных способов чтения текстового файла в зависимости от версии JDK и размера файла.
Точно так же, чтобы записать строку в файл:
|
01
02
03
04
05
06
07
08
09
10
|
private void writeFile(String fileName, String value) { try { FileWriter fw = new FileWriter(fileName); BufferedWriter bw = new BufferedWriter(fw); bw.write(value); bw.close(); } catch (IOException ex) { // Handle exception }} |
Для чтения / записи сжатых файлов, то есть двоичных данных, нам нужно работать с потоками и буферами. Итак, чтобы прочитать сжатый файл GZIP и получить строку:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
private String readCompressedFile(String fileName) { try { GZIPInputStream gis = new GZIPInputStream(new FileInputStream(fileName)); ByteArrayOutputStream fos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = gis.read(buffer)) != -1) { fos.write(buffer, 0, len); } fos.close(); gis.close(); return new String(fos.toByteArray()); } catch (IOException ex) { // Handle exception return null; }} |
и аналогичным образом записать строку в сжатый файл GZip:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
private void writeCompressedFile(String fileName, String value) { try { InputStream is = new ByteArrayInputStream(value.getBytes()); GZIPOutputStream gzipOS = new GZIPOutputStream(new FileOutputStream(fileName)); byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { gzipOS.write(buffer, 0, len); } gzipOS.close(); is.close(); } catch (IOException ex) { // Handle exception }} |
Ресурсы
Далее вы можете найти пару отличных ссылок с кодом Java для различных версий JDK:
| Ссылка: | Чтение / запись сжатых и несжатых файлов на Java от нашего партнера JCG Антонио Сантьяго в блоге A Curious Animal . |