文章目录

  • IO流案例
    • 复制单级文件夹
    • 复制多级文件夹
  • IO特殊操作流
    • 标准输入流
    • 字节打印流
    • 字符打印流
  • 对象序列化流
    • serialVersionUID&transient
  • Properties集合
    • Properties作为Map集合的使用
    • Properties作为Map集合的特有方法
    • Properties和IO流相结合的方法
  • CET4P228

IO流案例

复制单级文件夹

单级文件夹也就是一个文件夹里面有多个文件

步骤

  1. 创建数据源目录File对象
  2. 获取数据源目录File对象的名称
  3. 创建目的地目录File对象,路径自定义,文件名就用源目录对象的文件名
  4. 判断第3步创建的File是否存在,如果不存在,就创建
  5. 获取数据源目录下所有文件的File数组
  6. 遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件
  7. 获取数据源文件File对象的名称
  8. 创建目的地文件File对象,路径由(目的地目录+第7步获取的名称)组成
  9. 复制文件
    由于不清楚数据源目录下的文件都是什么类型的,所以采用字节流复制文件采用参数为File的构造方法
import java.io.*;public class example_2 {public static void main(String[] args) throws IOException {File srcFile = new File("D:\\JavaSE\\src\\day_19");   //1. 创建数据源目录File对象String fileSourceName = srcFile.getName();   //2. 获取数据源目录File对象的名称File destFolder = new File("D:\\", fileSourceName);  //3. 创建目的地目录File对象if (!destFolder.exists()) {//4. 判断第3步创建的File是否存在,如果不存在,就创建destFolder.mkdir();   //创建目录}File[] listFiles = srcFile.listFiles();    //5. 获取数据源目录下所有文件的File数组for (File f :   //6. 遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件listFiles) {String srcFiles = f.getName();  //7. 获取数据源文件File对象的名称File deskFile = new File(destFolder, srcFiles);//8. 创建目的地文件File对象copyFile(f, deskFile);  //9.复制文件}}public static void copyFile(File srcFile, File deskFile) throws IOException {BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(deskFile));BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(srcFile));byte[] bytes = new byte[1024];  //使用数组方法输入输出int len;while ((len = bufferedInputStream.read(bytes)) != -1) {bufferedOutputStream.write(bytes, 0, len);}bufferedInputStream.close();bufferedOutputStream.close();}
}

复制多级文件夹

多级文件夹就是一个文件夹里面包含另一个文件夹等

步骤

  1. 创建数据源File对象
  2. 创建目的地File对象,路径自定义
  3. 写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
  4. 判断数据源File是否是文件
    是文件:直接复制,用字节流
    不是文件:
    在目的地下创建该目录
    遍历获取该目录下的所有文件的File数组,得到每一个File对象
    回到3继续(递归)
import java.io.*;public class example_3 {public static void main(String[] args) throws IOException {File srcFile = new File("D:\\JavaSE");File destFile = new File("E:\\");copyFolder(srcFile, destFile);}private static void copyFolder(File srcFile, File destFile) throws IOException {if (srcFile.isDirectory()) { //判断是否为目录String srcFileName = srcFile.getName();File newFolder = new File(destFile, srcFileName);if (!newFolder.exists()) {   //判断该文件夹是否存在newFolder.mkdir();}File[] listFiles = srcFile.listFiles();for (File file :listFiles) {copyFolder(file, newFolder); //递归}} else {   //不是目录直接复制文件File newFile = new File(destFile, srcFile.getName());copyFile(srcFile, newFile);}}public static void copyFile(File srcFile, File deskFile) throws IOException {BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(deskFile));BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(srcFile));byte[] bytes = new byte[1024];  //使用数组方法输入输出int len;while ((len = bufferedInputStream.read(bytes)) != -1) {bufferedOutputStream.write(bytes, 0, len);}bufferedInputStream.close();bufferedOutputStream.close();}
}

IO特殊操作流

标准输入流

System类中有两个静态的成员变量

  • public static final InputStream in:标准输入流。通常该流对应于键盘输入或由主机环境或用户指定的
    另一个输入源
  • public static final PrintStream out:标准输出流。通常该流对应于显示输出或由主机环境或用户指定的
    另一个输出目标

由于自己实现键盘录入数据太麻烦了,所以Java提供了一个类

Scanner sc = new Scanner(System.in)

字节打印流

打印流分类

  • 字节打印流:PrintStream
  • 字符打印流:PrintWriter

打印流的特点

  • 只负责输出数据,不负责读取数据
  • 永远不会抛出IOException
  • 有自己的特有方法

字节打印流

  • PrintStream(String fileName):使用指定的文件名创建新的打印流
  • 使用继承父类的方法写数据,查看的时候会转码;使用自己的特有方法写数据,查看的数据原样输出
  • 可以改变输出语句的目的地
    public static void setOut(PrintStream out):重新分配“标准”输出流

字符打印流

字符打印流构造方法

方法名 说明
PrintWriter(String fileName) 使用指定的文件名创建一个新的PrintWriter,而不需要自动执行刷新
PrintWriter(Writer out, boolean autoFlush) 创建一个新的PrintWriter out:字符输出流 autoFlush: 一个布尔值,如果为真,则println , printf ,或format方法将刷新输出缓冲区
import java.io.PrintWriter;public class example_8 {public static void main(String[] args) {//        PrintWriter printWriter = new PrintWriter(System.out);  //输出到控制台
//        printWriter.print("hello");
//        printWriter.flush();    //如果不刷新的话是不会显示的
//        printWriter.close();PrintWriter printWriter1 = new PrintWriter(System.out, true);   //自动刷新printWriter1.print("Java");printWriter1.close();}
}

对象序列化流

对象序列化介绍

  • 对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象
  • 这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存储的属性等信息
  • 字节序列写到文件之后,相当于文件中持久保存了一个对象的信息
  • 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化

对象序列化流: ObjectOutputStream

  • 将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectInputStream读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储。 如果流是网络套接字流,则可以在另一个主机上或另一个进程中重构对象

构造方法

方法名 说明
ObjectOutputStream(OutputStream out) 创建一个写入指定的OutputStream的ObjectOutputStream

序列化对象的方法

方法名 说明
void writeObject(Object obj) 将指定的对象写入ObjectOutputStream

注意事项

  • 一个对象要想被序列化,该对象所属的类必须必须实现Serializable 接口Serializable是一个标记接口,实现该接口,不需要重写任何方法
import java.io.*;class Student implements Serializable { //实行接口//   private static final long serialVersionUID = 42L;private String name;public Student() {}public Student(String name) {this.name = name;}

serialVersionUID&transient

serialVersionUID

  • 用对象序列化流序列化了一个对象,假如我们修改了对象所属的类文件,读取数据会不会出问题呢?

    • 会出问题,会抛出InvalidClassException异常
  • 如果出问题了,如何解决呢?
    • 重新序列化
    • 给对象所属的类加一个serialVersionUID private static final long serialVersionUID = 42L;

transient

  • 如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?

    • 给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程
class Student implements Serializable {private static final long serialVersionUID = 42L;private String name;private transient int age;  //不参与序列化过程public Student() {}public Student(String name) {this.name = name;}

Properties集合

Properties作为Map集合的使用

Properties介绍

  • 是一个Map体系的集合类
  • Properties可以保存到流中或从流中加载
  • 属性列表中的每个键及其对应的值都是一个字符串

Properties基本使用

import java.util.Properties;
import java.util.Set;public class example_5 {public static void main(String[] args) {Properties properties = new Properties();properties.setProperty("abc001","老师");properties.setProperty("abc002","小明");properties.setProperty("abc003","小红");properties.setProperty("abc004","小刚");
//        Set<Object> objects = properties.keySet();    //获取键的集合
//        for (Object k:    //遍历键的集合
//             objects) {//            Object v = properties.get(k);
//            System.out.println(k+","+v);
//        }Set<String> stringSet = properties.stringPropertyNames();for (String k :stringSet) {String v = properties.getProperty(k);System.out.println(k+v);}}
}

Properties作为Map集合的特有方法

方法名 说明
Object setProperty(String key,String value) 设置集合的键和值,都是String类型,底层调用 Hashtable方法 put
String getProperty(String key) 使用此属性列表中指定的键搜索属性
Set stringPropertyNames() 从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串

使用的例子在上面

Properties和IO流相结合的方法

方法名 说明
void load(InputStream inStream) 从输入字节流读取属性列表(键和元素对)
void load(Reader reader) 从输入字符流读取属性列表(键和元素对)
void store(OutputStream out, String comments) 将此属性列表(键和元素对)写入此 Properties表中,以适合于使用load(InputStream)方法的格式写入输出字节流
void store(Writer writer,String comments) 将此属性列表(键和元素对)写入此 Properties表中,以适合使用load(Reader)方法的格式写入输出字符流
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;public class example_6 {public static void main(String[] args) throws IOException {//        myStore();    //把集合中的数据保存到文件中myLoad();    //把文件中的数据加载到集合中}private static void myLoad() throws IOException {Properties properties = new Properties();FileReader fileReader = new FileReader("D:\\JavaSE\\bw.txt");properties.load(fileReader); //从文件中输入fileReader.close();System.out.println(properties);}private static void myStore() throws IOException {Properties properties = new Properties();properties.setProperty("abc001","老师");properties.setProperty("abc002","小明");properties.setProperty("abc003","小红");FileWriter fileWriter = new FileWriter("D:\\JavaSE\\bw.txt");properties.store(fileWriter,null);  //第二个参数是描述信息fileWriter.close();}
}

CET4P228

  • climax
  • battalion
  • implicit
  • preview
  • climax
  • baby boom
  • proclaim
  • ward
  • chorus
  • badminton
  • coherent
  • biochemist

IO流案例以及特殊操作流/对象对象序列化流/Properties集合相关推荐

  1. 对象的序列化流_ObjectOutputStream

    package com.learn.demo04.ObjectStream;import java.io.FileOutputStream; import java.io.IOException; i ...

  2. 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称

    文章目录 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称 ...

  3. java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...

    一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...

  4. [Java基础]对象(反)序列化流

    对象序列化流: 代码如下: package ObjectOutputStreamPack;import java.io.Serializable;public class Student implem ...

  5. Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties...

    你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新 ...

  6. Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties

    你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新 ...

  7. (java)IO流对象(六)集合Properties类、序列化流、反序列化流、打印流

    [Properties特点] /** 集合对象Properties类特点:* 1. 继承Hashtable,实现Map接口* 2. 该集合无泛型,键值都是字符串* 3. 键值可以存储到集合中,也可以存 ...

  8. io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流

    第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...

  9. File类与IO流知识总结(三):缓冲流、转换流、序列化流

    一 :缓冲流 在上篇文章中学习了基本的一些流,作为IO流的入门,而现在我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等.这些功能更为强大的流, ...

最新文章

  1. 数学符号正三角形△和倒三角形▽的意思
  2. Web Service入门简介(一个简单的WebService示例)
  3. 逆向入门--简单win32CK逆向手记
  4. php ismethod,结合php类三种属性说明is_callable和method_exists简单区别
  5. c#中Task线程的用法
  6. 深度学习TF—6.神经网络过拟合及reduce overfitted
  7. mac上捕获Dock截图的方法
  8. 科学计算与可视化python_Python科学计算和可视化
  9. CGLIB 动态代理使用
  10. Netty websocket 推送数据压缩以 js解压
  11. 电机系列(1) - foc最基本原理、clark变换 、park变换、附代码
  12. 《C》C语言实现FFT算法
  13. 学3D建模的电脑配置
  14. 深度学习结合SLAM的研究思路/成果整理之(二)语义SLAM 端到端
  15. 以下数据库收录外文文献全文的有_【讲座】外文文献的检索与获取
  16. 将数组分成两部分使得两部分的和的差最小
  17. 区块链是什么?华为云学院带你领略区块链的前世今生
  18. 基于Matlab的数字水印设计
  19. Java学习笔记(五):Complex类的设计及加减乘除运算的实现
  20. 八千字,带你看示波器的发展史。

热门文章

  1. ScheduleMaster分布式任务调度中心基本使用和原理
  2. 从零开始学Circos绘制圈图(一)
  3. 无障碍模式设计:别让无障碍,成为一种障碍
  4. mbp连接wifi没弹出认证页面
  5. 速学堂第七章作业编程题答案(自写)
  6. 360随身WIFI作USB无线网卡的做法
  7. 【Go语言实战】(8) Go语言并发爬虫
  8. WINDOWS PE制作 - 主引导记录(Master Boot Record)介绍
  9. PC(电脑)设置固定本地IP方法
  10. P2P-KAD(Kademlia)详解