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.面向对象的特征有哪些方面 ①抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 ...
随机推荐
- BZOJ1004[HNOI2008]Cards——polya定理+背包
题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色 ...
- Luogu4389 付公主的背包(生成函数+多项式exp)
显然构造出生成函数,对体积v的物品,生成函数为1+xv+x2v+……=1/(1-xv).将所有生成函数乘起来得到的多项式即为答案,设为F(x),即F(x)=1/∏(1-xvi).但这个多项式的项数是Σ ...
- 云服务器搭建在线ssh终端GateOne
由于公司在使用内网和安全桌面,不能在安全桌面中安装Xshell的ssh终端,所有想操作个人公网服务器很困难. 查阅发现,使用GateOne可以在服务器上搭建一个在线的ssh工具.使用体验友好,可以满足 ...
- CH2101 可达性统计(算竞进阶习题)
拓扑排序+状态压缩 考虑每一个点能够到达的所有点都是与该店相邻的点的后继节点,可知: 令f[u]表示u点可到达的节点个数,f[u]={u}与f[v](u, v)的并集 于是可以利用状态压缩,能够到达的 ...
- 【XSY1762】染色问题 网络流
题目描述 给定一张\(n\)个点\(m\)条边的无向图.每个顶点有一个颜色,要么是黑,要么是白.我们想进行一些操作,使得最终每一条边的两个端点都是不同的颜色.每一次操作,你可以将一条边的两个端点交换颜 ...
- bzoj 2761: [JLOI2011]不重复数字 (map||Treap)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2761 思路: map标记 实现代码: #include<bits/stdc++.h&g ...
- Python 面试题_未完
基础部分 1. 为什么学习Python 家里有在这个IT圈子里面,也想让我接触这个圈子,然后给我建议学的Python, 然后自己通过百度和向有学过Python的同学了解了Python,Python这门 ...
- BZOJ4669抢夺(费用流+二分答案)
题目描述 大战将至, 美国决定实行计划经济.美国西部总共有 N 个城市,编号 为 0 ∼ N − 1,以及 M 条道路,道路是单向的.其中城市 0 是一个大城 市,里面住着 K 个人,而城市 N − ...
- 汽车控制器LIMPHOME电路设计
摘要:本文介绍汽车控制器上常用的3种LIMPHOME电路设计方法,用于在单片机复位重启期间仍能保证外部输出正确性,确保行车安全. 在电子电气领域,单片机使用非常广泛,单片机的复位重启是设计时必须 ...
- 初入react-redux (基于webpack babel的react应用框架)
react这么热门的框架也不介绍了,redux是一个单项数据流的小框架,当然不只配合react,它起初是为react而配的,现在面向所有了,比如ng-redux的项目.redux做为react的标准搭 ...