一:二进制文件读写

(一)写文件

  1. –先创建文件,写入数据,关闭文件
  2. FileOutputStream, BufferedOutputStreamDataOutputStream
  3. DataOutputStream
  4.    flush
  5.    write/writeBoolean/writeByte/writeChars/writeDouble/writeInt/WriteUTF/…
  6. try-resource 语句,自动关闭资源
  7. –关闭最外层的数据流,将会把其上所有的数据流关闭
  1. private static void WriteBinFile() {
  2. // TODO Auto-generated method stub
  3. FileOutputStream fos = null;
  4. BufferedOutputStream bos = null;
  5. DataOutputStream dos = null;
  6.  
  7. try {
  8. // 节点类
  9. fos = new FileOutputStream("D:\\MyJava\\Code\\JH16\\test\\aa\\bb\\F.bat");
  10. bos = new BufferedOutputStream(fos); //装饰类
  11. dos = new DataOutputStream(bos); //装饰类
  12.  
  13. dos.writeInt();
  14. dos.writeUTF("af");
  15. dos.writeInt();
  16. dos.writeInt();
  17. dos.writeUTF("你");
  18. }catch(Exception e) {
  19. System.err.println(e.getMessage());
  20. }finally {
  21. try {
  22. dos.close(); // 关闭最后一个类,会将所有的底层流都关闭
  23. }catch(Exception e){
  24. System.err.println(e.getMessage());
  25. }
  26. }
  27. }

(二):读文件

  1. –先打开文件,读入数据,关闭文件
  2. FileInputStream, BufferedInputStreamDataInputStream
  3. DataInputStream
  4.    read/readBoolean/readChar/readDouble/readFloat/readInt/readUTF/…
  5. try-resource 语句,自动关闭资源
  6. –关闭最外层的数据流,将会把其上所有的数据流关闭
  1. private static void ReadBinFile() {
  2. // TODO Auto-generated method stub
  3.  
  4. try(DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("D:\\MyJava\\Code\\JH16\\test\\aa\\bb\\F.bat")))){
  5. int a = dis.readInt();
  6. String s1 = dis.readUTF();
  7. int b = dis.readInt();
  8. int c = dis.readInt();
  9. String s2 = dis.readUTF();
  10. System.out.printf("%d %s %d %d %s",a, s1,b,c,s2);
  11. }catch(Exception e) {
  12. System.err.println(e.getMessage());
  13. }
  14.  
  15. }

二:ZIP文件读写

  1. 压缩包:zip, rar, gz, ……
  2. Java zip 包支持ZipGzip包的压缩和解压
  3. zip文件操作类: java.util.zip包中
  4. java.io.InputStream, java.io.OutputStream的子类
  5. ZipInputStream, ZipOutputSream 压缩文件输入/输出流
  6. ZipEntry 压缩项

(一)单个/多个压缩

  1. –打开输出zip文件
  2. –添加一个ZipEntry
  3. –打开一个输入文件,读数据,向ZipEntry写数据,关闭输入文件
  4. –重复以上两个步骤,写入多个文件到zip文件中
  5. –关闭zip文件
  1. public static void SingleZip() throws Exception{
  2. File file = new File("c:/temp/abc.txt") ; // 定义要压缩的文件
  3. File zipFile = new File("c:/temp/single2.zip") ; // 定义压缩文件名称
  4.  
  5. InputStream input = new FileInputStream(file) ; // 定义文件的输入流
  6. ZipOutputStream zipOut = null ; // 声明压缩流对象
  7. zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
  8. zipOut.putNextEntry(new ZipEntry(file.getName())) ; // 设置ZipEntry对象
  9. zipOut.setComment("single file zip") ; // 设置注释
  10.  
  11. //压缩过程
  12. int temp = ;
  13. while((temp=input.read())!=-){ // 读取内容
  14. zipOut.write(temp) ; // 压缩输出
  15. }
  16. input.close() ; // 关闭输入流
  17. zipOut.close() ; // 关闭输出流
  18.  
  19. System.out.println("single file zip done.");
  20. }
  1. public static void MultipleFileZip(String args[]) throws Exception{ // 所有异常抛出
  2. File file = new File("c:/temp/multiple") ; // 定义要压缩的文件夹
  3. File zipFile = new File("c:/temp/multiple2.zip") ; // 定义压缩文件名称
  4.  
  5. InputStream input = null ; // 定义文件输入流
  6. ZipOutputStream zipOut = null ; // 声明压缩流对象
  7. zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
  8. zipOut.setComment("multiple file zip") ; // 设置注释
  9.  
  10. //开始压缩
  11. int temp = ;
  12. if(file.isDirectory()){ // 判断是否是文件夹
  13. File lists[] = file.listFiles() ; // 列出全部子文件
  14. for(int i=;i<lists.length;i++){
  15. input = new FileInputStream(lists[i]) ; // 定义文件的输入流
  16. zipOut.putNextEntry(new ZipEntry(file.getName()
  17. +File.separator+lists[i].getName())) ; // 设置ZipEntry对象
  18. System.out.println("正在压缩" + lists[i].getName());
  19. while((temp=input.read())!=-){ // 读取内容
  20. zipOut.write(temp) ; // 压缩输出
  21. }
  22. input.close() ; // 关闭输入流
  23. }
  24. }
  25. zipOut.close() ; // 关闭输出流
  26. System.out.println("multiple file zip done.");
  27. }

(二)单个/多个文件解压

  1. –打开输入的zip文件
  2. –获取下一个ZipEntry
  3. –新建一个目标文件,从ZipEntry读取数据,向目标文件写入数据,
  4. 关闭目标文件
  5. –重复以上两个步骤,从zip包中读取数据到多个目标文件
  6. –关闭zip文件
  1. public static void SingleFileUnzip(String args[]) throws Exception{
  2. //待解压文件, 需要从zip文件打开输入流,读取数据到java中
  3. File zipFile = new File("c:/temp/single.zip") ; // 定义压缩文件名称
  4. ZipInputStream input = null ; // 定义压缩输入流
  5. input = new ZipInputStream(new FileInputStream(zipFile)) ; // 实例化ZIpInputStream
  6. ZipEntry entry = input.getNextEntry() ; // 得到一个压缩实体
  7. System.out.println("压缩实体名称:" + entry.getName()) ; //获取压缩包中文件名字
  8.  
  9. //新建目标文件,需要从目标文件打开输出流,数据从java流入
  10. File outFile = new File("c:/temp/" + entry.getName());
  11. OutputStream out = new FileOutputStream(outFile) ; // 实例化文件输出流
  12. int temp = ;
  13. while((temp=input.read())!=-){
  14. out.write(temp) ;
  15. }
  16. input.close() ; // 关闭输入流
  17. out.close() ; // 关闭输出流
  18. System.out.println("unzip done.") ;
  19. }
  1. public static void MultipleFileUnzip(String args[]) throws Exception{
  2. //待解压的zip文件,需要在zip文件上构建输入流,读取数据到Java中
  3. File file = new File("c:/temp/multiple.zip") ; // 定义压缩文件名称
  4. File outFile = null ; // 输出文件的时候要有文件夹的操作
  5. ZipFile zipFile = new ZipFile(file) ; // 实例化ZipFile对象
  6. ZipInputStream zipInput = null ; // 定义压缩输入流
  7.  
  8. //定义解压的文件名
  9. OutputStream out = null ; // 定义输出流,用于输出每一个实体内容
  10. InputStream input = null ; // 定义输入流,读取每一个ZipEntry
  11. ZipEntry entry = null ; // 每一个压缩实体
  12. zipInput = new ZipInputStream(new FileInputStream(file)) ; // 实例化ZIpInputStream
  13.  
  14. //遍历压缩包中的文件
  15. while((entry = zipInput.getNextEntry())!=null){ // 得到一个压缩实体
  16. System.out.println("解压缩" + entry.getName() + "文件") ;
  17. outFile = new File("c:/temp/" + entry.getName()) ; // 定义输出的文件路径
  18. if(!outFile.getParentFile().exists()){ // 如果输出文件夹不存在
  19. outFile.getParentFile().mkdirs() ;
  20. // 创建文件夹 ,如果这里的有多级文件夹不存在,请使用mkdirs()
  21. // 如果只是单纯的一级文件夹,使用mkdir()就好了
  22. }
  23. if(!outFile.exists()){ // 判断输出文件是否存在
  24. if(entry.isDirectory())
  25. {
  26. outFile.mkdirs();
  27. System.out.println("create directory...");
  28. }
  29. else
  30. {
  31. outFile.createNewFile() ; // 创建文件
  32. System.out.println("create file...");
  33. }
  34. }
  35. if(!entry.isDirectory())
  36. {
  37. input = zipFile.getInputStream(entry) ; // 得到每一个实体的输入流
  38. out = new FileOutputStream(outFile) ; // 实例化文件输出流
  39. int temp = ;
  40. while((temp=input.read())!=-){
  41. out.write(temp) ;
  42. }
  43. input.close() ; // 关闭输入流
  44. out.close() ; // 关闭输出流
  45. }
  46.  
  47. }
  48. input.close() ;
  49. }

三:练习

  1. 读取以下的a.txt,统计相同单词的次数,最后按照次数的大小降序排列,输出到b.txt中。
  2.  
  3. a.txt (===算分隔符,不算单词,不考虑单词大小写)
  4.  
  5. ==============
  6.  
  7. hello world
  8.  
  9. hello
  10.  
  11. java world hello
  12.  
  13. ==============
  14.  
  15. b.txt
  16.  
  17. ============
  18.  
  19. hello,
  20.  
  21. world,
  22.  
  23. java,
  24.  
  25. ============
  26.  
  27. 提示:需要用到的内容有文本文件读和写操作。还要加上数据结构,有ArrayList, HashMap,Comparable等。
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.Comparator;
  10. import java.util.HashMap;
  11. import java.util.Iterator;
  12. import java.util.List;
  13. import java.util.Map;
  14. import java.util.regex.Matcher;
  15. import java.util.regex.Pattern;
  16.  
  17. class MyComparator implements Comparator<Map.Entry<String,Integer>>{
  18. public int compare(HashMap.Entry<String,Integer> he1,HashMap.Entry<String,Integer> he2) {
  19. return he2.getValue()-he1.getValue();
  20. }
  21. }
  22.  
  23. public class homework {
  24. static final int MAX = ;
  25.  
  26. public static void main(String[] args) {
  27. // TODO Auto-generated method stub
  28. HashMap<String, Integer> hm = new HashMap<String,Integer>();
  29.  
  30. //文件读取
  31. try(BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("D:\\MyJava\\Code\\JH17\\a.txt")))){
  32. String line;
  33. while((line = br.readLine())!=null) {
  34. Pattern p = Pattern.compile("\\s+");  //正则匹配空格
  35. String words[]= p.split(line);  //获取的字符串进行分割单词
  36.  
  37. for(String item : words) {  
  38. if(item.length()!=) {
  39. if(hm.get(item)==null)
  40. hm.put(item, );  //将数据放入map中
  41. else
  42. hm.put(item, hm.get(item)+);
  43. }
  44. }
  45. }
  46. }catch(Exception e) {
  47. System.err.println(e.getMessage());
  48. }
  49.  
  50. //HashMap转换为list,进行排序
  51. List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(hm.entrySet());
  52. Collections.sort(list,new MyComparator());
  53.  
  54. //将数据写入文件
  55. try(BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\MyJava\\Code\\JH17\\b.txt")))){
  56. for(Map.Entry<String, Integer> item: list) {
  57. bw.write(item.getKey()+","+item.getValue());
  58. bw.newLine();
  59. }
  60. }catch(Exception e) {
  61. System.err.println(e.getMessage());
  62. }
  63.  
  64. }
  65.  
  66. }

JAVA核心技术I---JAVA基础知识(二进制文件读写和zip文件读写)的更多相关文章

  1. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

  2. C基础知识(9):输入输出、文件读写

    输入输出 (1) getchar() & putchar() 函数: 读写字符. (2) scanf() 和 printf() 函数:根据提供的format来转换输入为其他数据类型,并根据提供 ...

  3. Java核心技术 卷1 基础知识-第一天

    基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...

  4. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

  5. Java中浮点数的基础知识

    偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...

  6. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  7. java 程序运行的基础知识【Java bytecode】

    聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...

  8. Java学习1——计算机基础知识

    本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.

  9. JAVA面试题相关基础知识

        1.面向对象的特征有哪些方面 ①抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 ...

随机推荐

  1. 百度分享不支持https的解决方案(单独部署静态文件)

    首先是参考了博客,下载百度分享的静态代码 static 链接为:https://www.cnblogs.com/mmzuo-798/p/6434576.html 后来在nginx的 nginx.con ...

  2. vi编辑光标跳到文件开头和结尾以及清空文件命令

    vi编辑光标跳到文件开头和结尾以及清空文件命令 按esc退出编辑模式 跳到文件开头: :1 跳到文件结尾: :$ 清空文件内容: 小写的 d 加上大写的 G

  3. [luogu4479][BJWC2018]第k大斜率【二维偏序+二分+离散化+树状数组】

    传送门 https://www.luogu.org/problemnew/show/P4479 题目描述 在平面直角坐标系上,有 n 个不同的点.任意两个不同的点确定了一条直线.请求出所有斜率存在的直 ...

  4. SP8791 DYNALCA - Dynamic LCA 解题报告

    SP8791 DYNALCA - Dynamic LCA 有一个森林最初由 \(n (1 \le n \le 100000)\) 个互不相连的点构成 你需要处理以下操作: link A B:添加从顶点 ...

  5. luogu5022 [NOIp2018]旅行 (dfs)

    m=n-1的时候,就直接贪心地dfs就可以 m=n的话,就可以枚举删掉一条边,然后照着m=n-1做 $O(n^2)$大概能过 (然而我眼瞎看不到m<=n) #include<cstdio& ...

  6. centos7使用yum安装zabbix3.4

     应用环境: 关于ZABBIX: zabbix一开强大的开源监控工具,同类型还有nagios,ganglia,cacti等监控工具,通过过去一年Google趋势就知道zabbix全球的相对热度:   ...

  7. Linux的wget命令详解【转载】

    Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的 ...

  8. 安装PHP ImageMagick笔记

    安装过程 $ pecl install imagick 当提示Please provide the prefix of Imagemagick installation [autodetect] :直 ...

  9. 洛谷P2805 植物大战僵尸

    题意:给你一张图,每个节点保护若干节点. 当一个节点不被保护的时候,你就可以gay掉它. gay每个节点都有收益(可能为负),求最大总收益. 解:首先发现是一个最大权闭合子图. 把保护关系变成被保护, ...

  10. python random使用方法

    如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文 ...