package com.io;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

/*

* 1、格式:

try (

流对象的创建

) {

流对象的使用

}

try 后面的小括号中,表示不管 try 块是正常结束还是异常结束,这个资源都会被自动关闭。

*/

public class Demo01____7后关闭流的方式 {

public static void main(String[] args) throws IOException {

try(

FileInputStream fis = new FileInputStream("d:/IO文档/aaa.txt");

FileOutputStream fos = new FileOutputStream("d:/IO文档/bbb.txt");

){

byte[] bs = new byte[1024];

int len = 0;

while((len = fis.read(bs)) != -1) {

fos.write(bs, 0, len);

}

}

}

}

package com.io;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.SequenceInputStream;

import java.util.Enumeration;

import java.util.Vector;

public class Demo02_序列流多个文件 {

/*

* 合并多个流

* public SequenceInputStream(Enumeration<? extends InputStream> e)

* 可以看出构造方法给出Enumeration对象作为参数,Enumeration对象会返回一系列InputStream类型的对象,

* 提供给SequenceInputStream类读取。

*/

public static void main(String[] args) throws IOException {

//创建文件输入流读取文件

FileInputStream fis1 = new FileInputStream("d:/IO文档/aaa.txt");

FileInputStream fis2 = new FileInputStream("d:/IO文档/bbb.txt");

FileInputStream fis3 = new FileInputStream("d:/IO文档/ccc.txt");

//创建Vector对象

Vector<Object> vector = new Vector<>();

vector.add(fis1);

vector.add(fis2);

vector.add(fis3);

Enumeration elements = vector.elements();

SequenceInputStream sis = new SequenceInputStream(elements);

FileOutputStream fos = new FileOutputStream("d:/IO文档/ddd.txt");

byte[] bs = new byte[1024];

int len = 0;

while((len = sis.read(bs)) != -1) {

fos.write(bs,0,len);

}

fos.close();

sis.close();

fis1.close();

fis2.close();

fis3.close();

}

}

package com.io;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.SequenceInputStream;

public class Demo02_序列流又称合并流 {

/*

* SequenceInputStream类

*

* 【注】序列流只针对文本文档即.txt其他文件会有不一样的错误

*/

public static void main(String[] args) throws IOException {

/*

* 两个文件的合并流

*/

try(

//创建两个文件输入流读取两个文件

FileInputStream fis1 = new FileInputStream("d:/IO文档/aaa.txt");

FileInputStream fis2 = new FileInputStream("d:/IO文档/bbb.txt");

//SequenceInputStream对象用于合并两个文件输入流

SequenceInputStream sis = new SequenceInputStream(fis1,fis2);

FileOutputStream fos = new FileOutputStream("d:/IO文档/ccc.txt");

){

byte[] bs = new byte[1024];

int len = 0;

while ((len = sis.read(bs)) != -1) {

fos.write(bs, 0, len);

//写入换行

fos.write("\r\n".getBytes());

}

}

}

}

package com.io;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

public class Demo03_数据流 {

/*

* DateInputSream  和     DateOutputStream

* 将基本数据类型进行序列化和反序列化

* 而且还提供了readUTF()方法,和writeUTF()方法

*/

public static void main(String[] args) throws Exception {

FileOutputStream fos = new FileOutputStream("d:/IO文档/ddd.txt");

DataOutputStream dos = new DataOutputStream(fos);

dos.write(10);     //写入数据默认字节

dos.writeChar('中');

dos.writeUTF("加油,你会的到你所想要的一切");

dos.close();

fos.close();

FileInputStream fis = new FileInputStream("D:/IO文档/ddd.txt");

DataInputStream dis = new DataInputStream(fis);

System.out.println(dis.read());

System.out.println(dis.readChar());

System.out.println(dis.readUTF());

dis.close();

fos.close();

}

}

package com.io;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

public class Demo04_对象序列化 {

/*

* 【注】对象必须实现【【【Serializable接口】】】

*

* 序列化:将内存中的对象转化为二进制数据流的形式输出,保存到磁盘中(ObjectOutputStream)

*

* 反序列化:根据序列化保存的二进制数据文件,恢复到序列化之前的JAVA对象(ObjectInputStream)

*/

public static void main(String[] args) throws Exception {

Student s1 = new Student(1,"刘蕾助教",18);

Student s2 = new Student(2,"李木大神",22);

Student s3 = new Student(2,"李木大神",22);

Student s4 = new Student(2,"李木大神",22);

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stu.txt"));

oos.writeObject(s1);

oos.writeObject(s2);

oos.writeObject(s3);

oos.writeObject(s4);

oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu.txt"));

Student o1 = (Student) ois.readObject();

Student o2 = (Student) ois.readObject();

Student o3 = (Student) ois.readObject();

Student o4 = (Student) ois.readObject();

System.out.println(o1);

System.out.println(o2);

System.out.println(o3);

System.out.println(o4);

}

}

class Student implements Serializable{

private int id;

private String name;

private int age;

public Student() {

}

public Student(int id, String name, int age) {

this.id = id;

this.name = name;

this.age = age;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

package com.io;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

public class Demo05_序列化中遇到的问题 {

/*

* 当连续两次序列化同一对象引用时,并不会有两个对象被序列化。

* 第2次只是输出一个序列号编号。即使当第一序列化完成后,修改了对象的值,再次进行序列化,

* 被序列化对象的值也不会发生变化。

*

* 并且如果你在实体类中删除或者添加新的内容,则出现InvalidClassException错误

*/

public static void main(String[] args) throws Exception {

Student1 s1 = new Student1(1,"刘蕾助教",18);

Student1 s2 = new Student1(2,"李木大神",22);

Student1 s3 = new Student1(3,"李鑫大神");

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stu2.txt"));

oos.writeObject(s1);

s1.setAge(80);

oos.writeObject(s1);

// 和第1次写的是同一个对象,第2次序列化时并不会有两个对象被序列化。

//第2次只是输出一个序列号编号

oos.writeObject(s2);

oos.writeObject(s3);

oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu2.txt"));

Student1 o1 = (Student1) ois.readObject();

Student1 o2 = (Student1) ois.readObject();

Student1 o3 = (Student1) ois.readObject();

Student1 o4 = (Student1) ois.readObject();

System.out.println(o1);

System.out.println(o2);

System.out.println(o3);

System.out.println(o4);

/*

* Student [id=1, name=刘蕾助教, age=18]

Student [id=1, name=刘蕾助教, age=18]

Student [id=2, name=李木大神, age=22]

*/

}

}

class Student1 implements Serializable{

private int id;

private String name;

private int age;

public Student1() {

}

public Student1(int id, String name) {

this.id = id;

this.name = name;

}

public Student1(int id, String name, int age) {

this.id = id;

this.name = name;

this.age = age;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

package com.io;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

public class Demo06_序列化中的版本号问题 {

public static void main(String[] args) throws Exception {

Student2 s1 = new Student2(1,"刘蕾助教",18);

Student2 s2 = new Student2(2,"李木大神",22);

Student2 s3 = new Student2(2,"李木大神");

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stu1.txt"));

oos.writeObject(s1);

s1.setAge(80);

oos.writeObject(s1);

oos.writeObject(s2);

oos.writeObject(s3);

oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu1.txt"));

Student2 o1 = (Student2) ois.readObject();

Student2 o2 = (Student2) ois.readObject();

Student2 o3 = (Student2) ois.readObject();

Student2 o4 = (Student2) ois.readObject();

System.out.println(o1);

System.out.println(o2);

System.out.println(o3);

System.out.println(o4);

/*

* Student [id=1, name=刘蕾助教, age=18]

Student [id=1, name=刘蕾助教, age=18]

Student [id=2, name=李木大神, age=22]

Student [id=2, name=李木大神, age=0]

*/

}

}

class Student2 implements Serializable{

/**

* 下面这个即为版本号

*/

private static final long serialVersionUID = 1L;

private int id;

private String name;

private int age;

public Student2() {

}

public Student2(int id, String name) {

this.id = id;

this.name = name;

}

public Student2(int id, String name, int age) {

this.id = id;

this.name = name;

this.age = age;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

package com.io;

import java.io.FileNotFoundException;

import java.io.RandomAccessFile;

/*

* RandomAccessFile支持对文件进行非顺序的、随机的访问。

不是一个流对象,不在IO体系中,但是比流对象更加的强大;既可以读,也可以写;可以随机访问。

构造方法:

RandomAccessFile(String path, String mode)

path:文件的路径

mode:操作文件的模式, “r”是只读,”rw”是读写  "rws"是每次都更新到潜在的存储设备中 s指同步(synchronous)

"rwd"是将文件内容更新到存储设备中去

它实现了DataInput 和DataOutput 接口,并提供了三个额外方法:

int skipBytes(int)   向前移动文件指针指定的字节数

void seek(long)     文件指针定位,参数为偏移量

long getFilePointer()返回当前文件指针的位置(相对文件首的偏移量)

[补充] void setLength(long newLength) 设置文件长度

*/

public class Demo07_RandomAccessFile {

public static void main(String[] args) throws Exception {

/*RandomAccessFile raf = new RandomAccessFile("data.txt","r");

raf.skipBytes(5);  //向后移动5个字节,再开始读数据

int i = raf.read();

System.out.println(i);

raf.seek(5);  // 直接把指针定位的某个位置

String str2 = raf.readLine();

System.out.println(str2);

raf.close();*/

RandomAccessFile raf = new RandomAccessFile("data.txt","rw");

raf.writeInt(200);

raf.seek(10);

raf.writeInt(300);

int x = raf.readInt();

System.out.println(x);

raf.seek(10);

int y = raf.readInt();

System.out.println(y);

raf.close();

}

}

package com.io;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public class Demo08_压缩流 {

ZipOutputStream zos = null;

public Demo08_压缩流 (){

try {

zos= new ZipOutputStream(new FileOutputStream("F:\\0715大数据.zip"));

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

File f = new File("F:\\0715大数据");

Demo08_压缩流  zzz = new Demo08_压缩流 ();

zzz.zip(f);

zzz.close();

}

// 传入要压缩的文件夹

public  void zip(File file){

File[] fs = file.listFiles();

for(File f:fs){

if(f.isFile()){

zipFile(f);

}else{

zip(f);  // 是文件夹,递归调用

}

}

}

//压缩文件

public void zipFile(File f){

try {

// System.out.println(f.getPath().substring(3));

zos.putNextEntry(new ZipEntry(f.getPath().substring(3))); // 如果传入ZipEntry的文件名带有目录,在压缩时,压缩包中就会生成目录

// 一个ZipEntry是一个要被压缩的项

InputStream is = new FileInputStream(f);

byte[] b = new byte[1024];

int len = 0;

while((len=is.read(b))!=-1){

zos.write(b,0, len);

}

zos.closeEntry();

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

public void close(){

try {

zos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

JavaSE各阶段练习题----IO流相关推荐

  1. JavaSE各阶段练习题----文件和IO

    1.键盘录入一个文件夹路径,删除该文件夹(包含文件夹内容) import java.io.File; public class Test01_删除该文件夹 { public static void m ...

  2. JavaSE各阶段练习题----异常

    异常作业: 简述什么是异常.异常的继承体系? 异常是程序执行期间中断指令的正常流程的事件. 异常继承体系: 简述异常的处理方式? 捕获异常.即使用try-catch-finally 使用throws抛 ...

  3. JavaSE各阶段练习题----多线程-垃圾回收

    1独立完成三种单例模式的代码 package Single; /* 饿汉式  */ public class Demo01 {     public static void main(String[] ...

  4. JavaSE各阶段练习题----多线程

    1.有一辆班车除司机外只能承载80个人,假设前中后三个车门都能上车,如果坐满则不能再上车. 请用线程模拟上车过程并且在控制台打印出是从哪个车门上车以及剩下的座位数. 比如: (前门上车---还剩N个座 ...

  5. JavaSE各阶段练习题----Map

    1 分析以下需求,并用代码实现: (1)统计每个单词出现的次数 (2)有如下字符串"If you want to change your fate I think you must come ...

  6. JavaSE各阶段练习题----集合-Collection-Set-List

    1.分析以下需求,并用代码实现: (1)有如下代码: List<String> list = new ArrayList<>(); list.add("a" ...

  7. javaSE各阶段练习题--工具类-常用类-递归-包装类-内部类

    1 创建一个Student 类 包含属性有 序号 姓名 年龄 生日 提供对应的setter/getter创建对象,完成赋值(setter赋值和构造方法赋值) 在控制台输出学生对象的信息,要求生日的格式 ...

  8. javaSE各阶段练习题--面向对象-多态-抽象类-接口

    1 (多态)定义榨汁机JuiceMachine 有榨汁方法makeJuice,传入相应的水果.如果传入的是Apple 输出 "流出苹果汁"传入的是Orange 输出 "流 ...

  9. javaSE各阶段练习题--面向对象-StringBuilder-继承-包和访问权限

    1.将前一天作业,用StringBuffer进行改造,尽量提升时间和空间效率 定义一个方法,功能如下:给定一个数组,转换成一个字符串 例如:数组为int[] arr = {1, 2, 3},字符串为[ ...

最新文章

  1. SharePoint 2010中的客户端模型
  2. 自学是一门艺术:踏上数据科学、人工智能和机器学习的自学之路
  3. Facebook的「下一代 AI 计算平台」长什么样子?
  4. python3.1.1_python 3.1.1 with--enable shared:将不会构建任何扩展
  5. 【Python基础知识-pycharm版】第三节-列表
  6. MinGW-w64离线安装包,环境配置(Windows)
  7. mysql 数据增量抽取_通过Maxwell实时增量抽取MySQL binlog并通过stdout展示
  8. STM32 Futaba SBUS协议解析
  9. FileZilla Server 中文版使用教程
  10. Java实现MD5加盐加密算法
  11. Java多线程编程实战指南(核心篇)读书笔记(一)
  12. 《加速器理论(第二版)》读书笔记
  13. 安卓手机使用Tasker实现应用级功能,屏幕翻译v9,翻译复制贴图
  14. 【甄选靶场】Vulnhub百个项目渗透——项目十:stapler-1(文件上传,多方式提权)
  15. python中plt.hist_关于python中plt.hist参数的使用详解
  16. Java 设计模式最佳实践:四、结构模式
  17. java cipher用法_Java使用Cipher类实现加密的过程详解
  18. 我要你觉得,我不要我觉得--根据企业现状实施DevOps
  19. windows分类及安装
  20. Gluster升级遇到的问题

热门文章

  1. CodeForces - 1494D Dogeforces(贪心+构造)
  2. POJ - 3281 Dining(最大流+思维建边)
  3. POJ - 3250 Bad Hair Day(单调队列/单调栈)
  4. uva1347Tour
  5. 数据科学竞赛-数据挖掘赛流程
  6. 高德地图轨迹PHP,轨迹回放-点标记-示例中心-JS API 示例 | 高德地图API
  7. work php高性能,RabbitMQ之工作(Work)模式(PHP版)-Go语言中文社区
  8. CSP-2019总结
  9. 34.rust宏.txt
  10. H.264码流结构解析