JAVA核心技术I---JAVA基础知识(二进制文件读写和zip文件读写)
一:二进制文件读写
(一)写文件
- –先创建文件,写入数据,关闭文件
- –FileOutputStream, BufferedOutputStream,DataOutputStream
- –DataOutputStream
- • flush
- • write/writeBoolean/writeByte/writeChars/writeDouble/writeInt/WriteUTF/…
- –try-resource 语句,自动关闭资源
- –关闭最外层的数据流,将会把其上所有的数据流关闭
- private static void WriteBinFile() {
- // TODO Auto-generated method stub
- FileOutputStream fos = null;
- BufferedOutputStream bos = null;
- DataOutputStream dos = null;
- try {
- // 节点类
- fos = new FileOutputStream("D:\\MyJava\\Code\\JH16\\test\\aa\\bb\\F.bat");
- bos = new BufferedOutputStream(fos); //装饰类
- dos = new DataOutputStream(bos); //装饰类
- dos.writeInt();
- dos.writeUTF("af");
- dos.writeInt();
- dos.writeInt();
- dos.writeUTF("你");
- }catch(Exception e) {
- System.err.println(e.getMessage());
- }finally {
- try {
- dos.close(); // 关闭最后一个类,会将所有的底层流都关闭
- }catch(Exception e){
- System.err.println(e.getMessage());
- }
- }
- }
(二):读文件
- –先打开文件,读入数据,关闭文件
- –FileInputStream, BufferedInputStream,DataInputStream
- –DataInputStream
- • read/readBoolean/readChar/readDouble/readFloat/readInt/readUTF/…
- –try-resource 语句,自动关闭资源
- –关闭最外层的数据流,将会把其上所有的数据流关闭
- private static void ReadBinFile() {
- // TODO Auto-generated method stub
- try(DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("D:\\MyJava\\Code\\JH16\\test\\aa\\bb\\F.bat")))){
- int a = dis.readInt();
- String s1 = dis.readUTF();
- int b = dis.readInt();
- int c = dis.readInt();
- String s2 = dis.readUTF();
- System.out.printf("%d %s %d %d %s",a, s1,b,c,s2);
- }catch(Exception e) {
- System.err.println(e.getMessage());
- }
- }
二:ZIP文件读写
- 压缩包:zip, rar, gz, ……
- Java zip 包支持Zip和Gzip包的压缩和解压
- zip文件操作类: java.util.zip包中
- –java.io.InputStream, java.io.OutputStream的子类
- –ZipInputStream, ZipOutputSream 压缩文件输入/输出流
- –ZipEntry 压缩项
(一)单个/多个压缩
- –打开输出zip文件
- –添加一个ZipEntry
- –打开一个输入文件,读数据,向ZipEntry写数据,关闭输入文件
- –重复以上两个步骤,写入多个文件到zip文件中
- –关闭zip文件
- public static void SingleZip() throws Exception{
- File file = new File("c:/temp/abc.txt") ; // 定义要压缩的文件
- File zipFile = new File("c:/temp/single2.zip") ; // 定义压缩文件名称
- InputStream input = new FileInputStream(file) ; // 定义文件的输入流
- ZipOutputStream zipOut = null ; // 声明压缩流对象
- zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
- zipOut.putNextEntry(new ZipEntry(file.getName())) ; // 设置ZipEntry对象
- zipOut.setComment("single file zip") ; // 设置注释
- //压缩过程
- int temp = ;
- while((temp=input.read())!=-){ // 读取内容
- zipOut.write(temp) ; // 压缩输出
- }
- input.close() ; // 关闭输入流
- zipOut.close() ; // 关闭输出流
- System.out.println("single file zip done.");
- }
- public static void MultipleFileZip(String args[]) throws Exception{ // 所有异常抛出
- File file = new File("c:/temp/multiple") ; // 定义要压缩的文件夹
- File zipFile = new File("c:/temp/multiple2.zip") ; // 定义压缩文件名称
- InputStream input = null ; // 定义文件输入流
- ZipOutputStream zipOut = null ; // 声明压缩流对象
- zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
- zipOut.setComment("multiple file zip") ; // 设置注释
- //开始压缩
- int temp = ;
- if(file.isDirectory()){ // 判断是否是文件夹
- File lists[] = file.listFiles() ; // 列出全部子文件
- for(int i=;i<lists.length;i++){
- input = new FileInputStream(lists[i]) ; // 定义文件的输入流
- zipOut.putNextEntry(new ZipEntry(file.getName()
- +File.separator+lists[i].getName())) ; // 设置ZipEntry对象
- System.out.println("正在压缩" + lists[i].getName());
- while((temp=input.read())!=-){ // 读取内容
- zipOut.write(temp) ; // 压缩输出
- }
- input.close() ; // 关闭输入流
- }
- }
- zipOut.close() ; // 关闭输出流
- System.out.println("multiple file zip done.");
- }
(二)单个/多个文件解压
- –打开输入的zip文件
- –获取下一个ZipEntry
- –新建一个目标文件,从ZipEntry读取数据,向目标文件写入数据,
- 关闭目标文件
- –重复以上两个步骤,从zip包中读取数据到多个目标文件
- –关闭zip文件
- public static void SingleFileUnzip(String args[]) throws Exception{
- //待解压文件, 需要从zip文件打开输入流,读取数据到java中
- File zipFile = new File("c:/temp/single.zip") ; // 定义压缩文件名称
- ZipInputStream input = null ; // 定义压缩输入流
- input = new ZipInputStream(new FileInputStream(zipFile)) ; // 实例化ZIpInputStream
- ZipEntry entry = input.getNextEntry() ; // 得到一个压缩实体
- System.out.println("压缩实体名称:" + entry.getName()) ; //获取压缩包中文件名字
- //新建目标文件,需要从目标文件打开输出流,数据从java流入
- File outFile = new File("c:/temp/" + entry.getName());
- OutputStream out = new FileOutputStream(outFile) ; // 实例化文件输出流
- int temp = ;
- while((temp=input.read())!=-){
- out.write(temp) ;
- }
- input.close() ; // 关闭输入流
- out.close() ; // 关闭输出流
- System.out.println("unzip done.") ;
- }
- public static void MultipleFileUnzip(String args[]) throws Exception{
- //待解压的zip文件,需要在zip文件上构建输入流,读取数据到Java中
- File file = new File("c:/temp/multiple.zip") ; // 定义压缩文件名称
- File outFile = null ; // 输出文件的时候要有文件夹的操作
- ZipFile zipFile = new ZipFile(file) ; // 实例化ZipFile对象
- ZipInputStream zipInput = null ; // 定义压缩输入流
- //定义解压的文件名
- OutputStream out = null ; // 定义输出流,用于输出每一个实体内容
- InputStream input = null ; // 定义输入流,读取每一个ZipEntry
- ZipEntry entry = null ; // 每一个压缩实体
- zipInput = new ZipInputStream(new FileInputStream(file)) ; // 实例化ZIpInputStream
- //遍历压缩包中的文件
- while((entry = zipInput.getNextEntry())!=null){ // 得到一个压缩实体
- System.out.println("解压缩" + entry.getName() + "文件") ;
- outFile = new File("c:/temp/" + entry.getName()) ; // 定义输出的文件路径
- if(!outFile.getParentFile().exists()){ // 如果输出文件夹不存在
- outFile.getParentFile().mkdirs() ;
- // 创建文件夹 ,如果这里的有多级文件夹不存在,请使用mkdirs()
- // 如果只是单纯的一级文件夹,使用mkdir()就好了
- }
- if(!outFile.exists()){ // 判断输出文件是否存在
- if(entry.isDirectory())
- {
- outFile.mkdirs();
- System.out.println("create directory...");
- }
- else
- {
- outFile.createNewFile() ; // 创建文件
- System.out.println("create file...");
- }
- }
- if(!entry.isDirectory())
- {
- input = zipFile.getInputStream(entry) ; // 得到每一个实体的输入流
- out = new FileOutputStream(outFile) ; // 实例化文件输出流
- int temp = ;
- while((temp=input.read())!=-){
- out.write(temp) ;
- }
- input.close() ; // 关闭输入流
- out.close() ; // 关闭输出流
- }
- }
- input.close() ;
- }
三:练习
- 读取以下的a.txt,统计相同单词的次数,最后按照次数的大小降序排列,输出到b.txt中。
- a.txt (===算分隔符,不算单词,不考虑单词大小写)
- ==============
- hello world
- hello
- java world hello
- ==============
- b.txt
- ============
- hello,
- world,
- java,
- ============
- 提示:需要用到的内容有文本文件读和写操作。还要加上数据结构,有ArrayList, HashMap,Comparable等。
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- class MyComparator implements Comparator<Map.Entry<String,Integer>>{
- public int compare(HashMap.Entry<String,Integer> he1,HashMap.Entry<String,Integer> he2) {
- return he2.getValue()-he1.getValue();
- }
- }
- public class homework {
- static final int MAX = ;
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- HashMap<String, Integer> hm = new HashMap<String,Integer>();
- //文件读取
- try(BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("D:\\MyJava\\Code\\JH17\\a.txt")))){
- String line;
- while((line = br.readLine())!=null) {
- Pattern p = Pattern.compile("\\s+"); //正则匹配空格
- String words[]= p.split(line); //获取的字符串进行分割单词
- for(String item : words) {
- if(item.length()!=) {
- if(hm.get(item)==null)
- hm.put(item, ); //将数据放入map中
- else
- hm.put(item, hm.get(item)+);
- }
- }
- }
- }catch(Exception e) {
- System.err.println(e.getMessage());
- }
- //HashMap转换为list,进行排序
- List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(hm.entrySet());
- Collections.sort(list,new MyComparator());
- //将数据写入文件
- try(BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\MyJava\\Code\\JH17\\b.txt")))){
- for(Map.Entry<String, Integer> item: list) {
- bw.write(item.getKey()+","+item.getValue());
- bw.newLine();
- }
- }catch(Exception e) {
- System.err.println(e.getMessage());
- }
- }
- }
JAVA核心技术I---JAVA基础知识(二进制文件读写和zip文件读写)的更多相关文章
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- C基础知识(9):输入输出、文件读写
输入输出 (1) getchar() & putchar() 函数: 读写字符. (2) scanf() 和 printf() 函数:根据提供的format来转换输入为其他数据类型,并根据提供 ...
- Java核心技术 卷1 基础知识-第一天
基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- Java中浮点数的基础知识
偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- java 程序运行的基础知识【Java bytecode】
聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...
- Java学习1——计算机基础知识
本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.
- JAVA面试题相关基础知识
1.面向对象的特征有哪些方面 ①抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 ...
随机推荐
- 百度分享不支持https的解决方案(单独部署静态文件)
首先是参考了博客,下载百度分享的静态代码 static 链接为:https://www.cnblogs.com/mmzuo-798/p/6434576.html 后来在nginx的 nginx.con ...
- vi编辑光标跳到文件开头和结尾以及清空文件命令
vi编辑光标跳到文件开头和结尾以及清空文件命令 按esc退出编辑模式 跳到文件开头: :1 跳到文件结尾: :$ 清空文件内容: 小写的 d 加上大写的 G
- [luogu4479][BJWC2018]第k大斜率【二维偏序+二分+离散化+树状数组】
传送门 https://www.luogu.org/problemnew/show/P4479 题目描述 在平面直角坐标系上,有 n 个不同的点.任意两个不同的点确定了一条直线.请求出所有斜率存在的直 ...
- SP8791 DYNALCA - Dynamic LCA 解题报告
SP8791 DYNALCA - Dynamic LCA 有一个森林最初由 \(n (1 \le n \le 100000)\) 个互不相连的点构成 你需要处理以下操作: link A B:添加从顶点 ...
- luogu5022 [NOIp2018]旅行 (dfs)
m=n-1的时候,就直接贪心地dfs就可以 m=n的话,就可以枚举删掉一条边,然后照着m=n-1做 $O(n^2)$大概能过 (然而我眼瞎看不到m<=n) #include<cstdio& ...
- centos7使用yum安装zabbix3.4
应用环境: 关于ZABBIX: zabbix一开强大的开源监控工具,同类型还有nagios,ganglia,cacti等监控工具,通过过去一年Google趋势就知道zabbix全球的相对热度: ...
- Linux的wget命令详解【转载】
Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的 ...
- 安装PHP ImageMagick笔记
安装过程 $ pecl install imagick 当提示Please provide the prefix of Imagemagick installation [autodetect] :直 ...
- 洛谷P2805 植物大战僵尸
题意:给你一张图,每个节点保护若干节点. 当一个节点不被保护的时候,你就可以gay掉它. gay每个节点都有收益(可能为负),求最大总收益. 解:首先发现是一个最大权闭合子图. 把保护关系变成被保护, ...
- python random使用方法
如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文 ...