一:二进制文件读写

(一)写文件

–先创建文件,写入数据,关闭文件
–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文件读写)的更多相关文章

  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. BZOJ3291Alice与能源计划——匈牙利算法+模拟费用流

    题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验.为 了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...

  2. 读取CSV到DataTable

    using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using Sy ...

  3. mysql 2006错误 导入时

    导入数据库报此错误 1.找到my.ini (免安装版的是由于你自己创建的) (安装版的在 C:\ProgramData\MySQL\MySQL Server 8.0   你安装的盘位置) 2.修改参数 ...

  4. HihoCoder 1511: 树的方差(prufer序)

    题意 对于一棵 \(n\) 个点的带标号无根树,设 \(d[i]\) 为点 \(i\) 的度数,定义一棵树的方差为数组 \(d[1..n]\) 的方差. 给定 \(n\) ,求所有带标号的 \(n\) ...

  5. 【转】IAR Embedded Workbench for ARM 8.22.1 基础使用教程

    @2018-12-15 [小记] IAR Embedded Workbench for ARM 8.22.1 基础使用教程

  6. RabbitMQ图解

    一.MQ对比 二.RabbitMQ模式 三.队列模式 四.公平分发 五.主题模式

  7. 协同过滤算法 teamCF

    http://www.infoq.com/cn/articles/recommendation-algorithm-overview-part02

  8. [SCOI2014]方伯伯的OJ(线段树)

    方伯伯正在做他的Oj.现在他在处理Oj上的用户排名问题.Oj上注册了n个用户,编号为1-n“,一开始他们按照编号排名. 方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和编号: 1.操作格式为 ...

  9. Shiro中的Remember me设置

    1. 在Spring的相关配置文件中加入如下Remember me管理器配置: <!-- rememberMe管理器 --> <bean id="rememberMeMan ...

  10. CodeForces - 589B(暴力)

    题目链接:http://codeforces.com/problemset/problem/589/B 题目大意:告诉你n 个矩形,知道矩形的长度和宽度(长和宽可以互换),每个矩形的长度可以剪掉一部分 ...