这篇文章的主要原因是尝试不重复自己( DRY ),因为通常,我会遇到读写压缩和非压缩文件(主要是JSON和CSV)的递归需求。

首先让我们看看如何读取文本文件。 注意我正在使用(相对较小的)文本文件,因此:

  1. read方法返回一个包含全部内容的String。
  2. 我正在使用BufferedReader逐行读取。
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 exceptionreturn null;}return sb.toString();
}

注意:做事的方法不只一种。 在条目读取文本文件的最佳方式中 ,您可以找到许多不同的方法来读取文本文件,具体取决于您的JDK版本和文件大小。

类似于将String写入文件:

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压缩文件并获取字符串:

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 exceptionreturn null;}
}

并类似地将字符串写入GZip压缩文件:

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}
}

资源资源

接下来,您可以找到几个适用于各种JDK版本的Java代码的重要链接:

  • 读写文本文件
  • 读写二进制文件

翻译自: https://www.javacodegeeks.com/2015/01/readingwriting-compressed-and-not-compressed-files-in-java.html

用Java读取/写入压缩和非压缩文件相关推荐

  1. java压缩文件读取_用Java读取/写入压缩和非压缩文件

    java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...

  2. Python文件(一):文件类型、文件的打开,读取写入,关闭、文件备份、文件和文件夹的操作

    一.文件 文件是存储在存储器上的一组数据序列,可以包含任何数据内容. 文件是数据的抽象和集合. 二.文件类型 文本文件:长字符串 二进制是信息按照非字符但有特定格式形成的文件,文件内部数据的组织格式与 ...

  3. 超详细:Java 读取 Windows 共享文件夹中的文件,并下载到本地电脑中

    目录 JCIFS 介绍 SMB协议 设置共享文件夹(这里我们选择有密码的方式进行共享) 是否设置密码 创建 smb 协议 测试 使用代码将文件夹里的文件下载到本地 项目常常需要有访问共享文件夹的需求, ...

  4. java 读取使用keytool生产的keystore文件

    windows 环境下,使用keytool 生产keystore文件 keytool -genkeypair -keyalg RSA -keysize 1024 -sigalg SHA1withRSA ...

  5. java读取写入文件

    先来看一下java写入文件 1 public static void readTxt(String value) throws IOException { 2 FileWriter fw = null ...

  6. java 字节流写入_Java之基于字节流文件的写入和读取

    Java之基于字节流文件的写入如下: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOut ...

  7. java读取src路径下的txt文件_Java程序使用Maven后无法运行?

    问:老师,同样的代码,为何我将Java工程改造成Maven后,始终无法运行? 实现的功能:加载abc.txt文件,代码是写在了Demo类中. 开发工具是Idea. 1.以下是普通Java工程的目录结构 ...

  8. java读取日志_Java实时监控日志文件并输出的方法详解

    前言 最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据 ...

  9. java读取dat_Java批量解析微信dat文件

    代码 以下是java代码,创建一个weChatImgRevert .java后复制进去就好啦. 此处的jdk版本需要1.8以上-,另外三个参数需要改成自己的哦~ package main.java.c ...

最新文章

  1. iOS10 UI教程视图和子视图的可见性
  2. 有了这些经典书籍+配套实验环境上线,还有什么借口说学不好编程?
  3. React Antd Upload自定义上传customRequest
  4. Java双端队列Deque及其应用
  5. LeetCode - 48. Rotate Image
  6. Another Distinct Values
  7. 在Mac上安装SoapUI
  8. 苹果手机搭建php服务器,给自己搭建iPhone Installer软件源
  9. 僵尸进程以及如何处理僵尸进程
  10. android立方体旋转动画,如何画出一个旋转的立方体
  11. 二维码设备巡检解决方案
  12. 影响英语单词拼写的6大因素
  13. 计算机休眠会断电吗,win7休眠后能将电脑断电吗?
  14. 中国云计算市场排名_中国云计算市场排名第一
  15. 蓝桥杯——大臣的旅费
  16. 服务器硬盘可以换盘位吗,RAID里的硬盘可以互换槽位吗
  17. Ubuntu忘记超级用户root密码,重新设置密码
  18. [Linux] Bash中大括号和小括号的使用
  19. Git Bash 下进行快速复制粘贴
  20. 辅助系统(Flume,azkaban,sqoop)

热门文章

  1. 复制一个5G文件只需要两秒,全网最牛方法!
  2. java计算出生到现在经历了多少天
  3. mysql---CV出现的中英文符号错误
  4. java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)
  5. JSP引入CSS文件无法生效的问题
  6. 精打细算油盐_Java:ChronicleMap第1部分,精打细算
  7. jdk8切换成jdk6_运行中的JDK语言功能预览:切换表达式
  8. java中的深度克隆浅克隆_了解Java中的可克隆接口
  9. neo4j 两个点创建关系_Neo4j:找到两个纬度/经度之间的中间点
  10. Java 8之前和之后的Lambda表达式