• java---IO流:特殊操作流


    打印流
    1. package IO流.特殊操作流;
    2. /*
    3. 打印流分类:
    4. 字节打印流:PrintStream
    5. 字符打印流:PrintWriter
    6. 打印流特点:
    7. 只负责输出数据,不负责读取数据
    8. 有自己的特有方法
    9. 字节打印流
    10. PrintStream(String fileName)使用指定的文件名创建新的打印流
    11. 使用继承父类的方法写数据,查看的时候会转码
    12. 使用字节的特有方法写数据,查看的数据原样输出
    13. */
    14. import java.io.*;
    15. public class 打印流 {
    16. public static void main(String[] args) throws IOException {
    17. /* //PrintStream(String fileName)使用指定的文件名创建新的打印流
    18. PrintStream ps = new PrintStream("idea_text\\ps.txt");
    19. //写数据
    20. //字节输出流特有方法
    21. ps.write(97);
    22. //使用特有方法写数据
    23. ps.print(97);
    24. ps.print(98);
    25. ps.println(97);
    26. ps.println(98);
    27. //释放资源
    28. ps.close();*/
    29. /* //字符打印流PrintWriter的构造方法
    30. PrintWriter​(String fileName)
    31. 使用指定的文件名创建一个新的PrintWriter,而不需要自动执行行刷新。
    32. PrintWriter​(Writer out, boolean autoFlush)
    33. 创建一个新的PrintWriter。
    34. out字符输出流,autoFlush布尔值,如果为真,则print,println,或format方法将刷新输出缓冲区
    35. */
    36. PrintWriter pw=new PrintWriter(new FileWriter("idea_text\\ps.txt"));
    37. pw.println("hello");
    38. pw.println("world");
    39. }
    40. }
    复制java文件打印流改进版
    1. package IO流.特殊操作流;
    2. import java.io.*;
    3. public class 复制java文件打印流改进版 {
    4. public static void main(String[] args) throws IOException {
    5. //根据数据源创建字符输入流对象
    6. BufferedReader br = new BufferedReader(new FileReader("1"));
    7. //根据目的地创建字符输出流对象
    8. PrintWriter pw=new PrintWriter(new FileWriter("2"));
    9. //读写数据,复制文件
    10. String line;
    11. while ((line = br.readLine()) != null) {
    12. pw.println(line);
    13. }
    14. //释放资源
    15. pw.close();
    16. br.close();
    17. }
    18. }
    Properties作为Map集合的使用
    1. package IO流.特殊操作流.Properties;
    2. /*
    3. Properties概述:
    4. 1,是一个Map体系的集合类
    5. 2,Properties可以保存到流中或从流中加载
    6. */
    7. import java.util.Properties;
    8. import java.util.Set;
    9. public class Properties作为Map集合的使用 {
    10. public static void main(String[] args) {
    11. //创建集合对象--Properties不是泛型
    12. // Properties<String, String> properties = new Properties<String, String>();
    13. Properties prop = new Properties();
    14. //存储元素
    15. prop.put("001", "z");
    16. prop.put("002", "x");
    17. prop.put("003", "c");
    18. //遍历结合
    19. Set<Object> keySet = prop.keySet();
    20. for (Object key : keySet) {
    21. Object value = prop.get(key);
    22. System.out.println(key + "," + value);
    23. }
    24. }
    25. }
    Properties特有方法
    1. package IO流.特殊操作流.Properties;
    2. /*
    3. Object setProperty​(String key, String value)
    4. 调用 Hashtable方法 put 。
    5. String getProperty​(String key)
    6. 使用此属性列表中指定的键搜索属性。
    7. Set<String> stringPropertyNames​()
    8. 从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
    9. */
    10. import java.util.Properties;
    11. import java.util.Set;
    12. public class Properties特有方法 {
    13. public static void main(String[] args) {
    14. Properties prop=new Properties();
    15. prop.setProperty("001", "z");
    16. prop.setProperty("002", "x");
    17. prop.setProperty("003", "c");
    18. System.out.println(prop.getProperty("001"));
    19. Set<String> names = prop.stringPropertyNames();
    20. for (String key : names) {
    21. String value = prop.getProperty(key);
    22. System.out.println(key + "=" + value);
    23. }
    24. }
    25. }
    Properties和IO流结合的方法
    1. package IO流.特殊操作流.Properties;
    2. /*
    3. void load(InputStream inStream) 从输入字节流读取键值对
    4. void store(OutputStream out,String comments)
    5. 将键值对写入Properties,以适合于使用load(InputStream)方法的格式写入输出字节流
    6. void load(Reader reader) 从输入字符流读取键值对
    7. void store(Writer writer,String comments)
    8. 将键值对写入Properties,以适合于使用load(InputStream)方法的格式写入输出字符流
    9. */
    10. import java.io.FileNotFoundException;
    11. import java.io.FileReader;
    12. import java.io.FileWriter;
    13. import java.io.IOException;
    14. import java.util.Properties;
    15. public class Properties和IO流结合的方法 {
    16. public static void main(String[] args) throws IOException {
    17. //把集合中的数据保存文件中
    18. myStore();
    19. //把文件中的数据加载到集合
    20. myload();
    21. }
    22. private static void myload() throws IOException {
    23. Properties prop = new Properties();
    24. //void load(Reader reader)
    25. FileReader fr= new FileReader("idea_text\\fw.txt");
    26. prop.load(fr);
    27. fr.close();
    28. System.out.println(prop);
    29. }
    30. private static void myStore() throws IOException {
    31. Properties prop = new Properties();
    32. prop.setProperty("001","z");
    33. prop.setProperty("002","x");
    34. prop.setProperty("003","c");
    35. //void store(Writer writer,String comments)
    36. FileWriter fw = new FileWriter("idea_text\\fw.txt");
    37. prop.store(fw,null);
    38. fw.close();
    39. }
    40. }
    对象序列化流
    1. package IO流.特殊操作流.对象序列化流;
    2. import java.io.Serializable;
    3. public class Student implements Serializable {
    4. private String name;
    5. private int age;
    6. public Student() {
    7. }
    8. public Student(String name, int age) {
    9. this.name = name;
    10. this.age = age;
    11. }
    12. public String getName() {
    13. return name;
    14. }
    15. public void setName(String name) {
    16. this.name = name;
    17. }
    18. public int getAge() {
    19. return age;
    20. }
    21. public void setAge(int age) {
    22. this.age = age;
    23. }
    24. }
    1. package IO流.特殊操作流.对象序列化流;
    2. /*
    3. 对象序列化流:ObjectOutputStream
    4. 将Java对象的原始数据类型和图形写入OutputStream,可以使用ObjectInputStream读取(重构)对象。
    5. 可以通过使用流的文件来实现对象的持久存储。如果流是网络套接字流,则可以在另一个主机上或另一个进程中重构对象
    6. 构造方法:
    7. ObjectOutputStream(OutputStreamout):
    8. 创建一个写入指定的OutputStream的ObjectOutputStream
    9. 序列化对象的方法:
    10. void writeObject(Object obj):将指定的对象写入ObjectOutputStream
    11. 注意:
    12. 一个对象要想被序列化,该对象所属的类必须必须实现Serializable接口
    13. Serializable是一个标记接口,实现该接口,不需要重写任何方法
    14. */
    15. import java.io.FileNotFoundException;
    16. import java.io.FileOutputStream;
    17. import java.io.IOException;
    18. import java.io.ObjectOutputStream;
    19. public class 对象序列化流 {
    20. public static void main(String[] args) throws IOException {
    21. //创建一个写入指定的OutputStream的ObjectOutputStream
    22. ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("idea_text\\oos.txt"));
    23. //创建对象
    24. Student s=new Student("zxz",30);
    25. //void writeObject(Object obj):将指定的对象写入ObjectOutputStream
    26. oos.writeObject(s);
    27. //释放资源
    28. oos.close();
    29. }
    30. }
    对象反序列化流
    1. package IO流.特殊操作流.对象序列化流;
    2. /*
    3. 对象反序列化流:ObjectInputStream
    4. ObjectInputStream反序列化先前使用ObjectOutputStream编写的原始数据和对象
    5. 构造方法:
    6. ObjectInputStream(InputStream in):创建从指定的IutStream读取的ObjectInputStream
    7. 反序列化对象的方法:
    8. Object readObject0:从ObjectInputStream读取一个对象
    9. */
    10. import java.io.*;
    11. public class 对象反序列化流 {
    12. public static void main(String[] args) throws IOException, ClassNotFoundException {
    13. //ObjectInputStream(InputStream in):创建从指定的IutStream读取的ObjectInputStream
    14. ObjectInputStream ois = new ObjectInputStream(new FileInputStream("idea_text\\oos.txt"));
    15. //Object readObject0:从ObjectInputStream读取一个对象
    16. Object obj=ois.readObject();
    17. Student s=(Student) obj;
    18. System.out.println(s.getName()+","+s.getAge());
    19. ois.close();
    20. }
    21. }
    对象序列化流的问题
    1. package IO流.特殊操作流.对象序列化流.对象序列化流的问题;
    2. import java.io.Serializable;
    3. public class Student implements Serializable {
    4. private static final long serialVersionUID =42L;
    5. private String name;
    6. // private int age;
    7. private transient int age; //age=null;
    8. public Student() {
    9. }
    10. public Student(String name, int age) {
    11. this.name = name;
    12. this.age = age;
    13. }
    14. public String getName() {
    15. return name;
    16. }
    17. public void setName(String name) {
    18. this.name = name;
    19. }
    20. public int getAge() {
    21. return age;
    22. }
    23. public void setAge(int age) {
    24. this.age = age;
    25. }
    26. @Override
    27. public String toString() {//所改变的对象所属的类文件
    28. return "Student{" +
    29. "name='" + name + '\'' +
    30. ", age=" + age +
    31. '}';
    32. }
    33. }
    1. package IO流.特殊操作流.对象序列化流.对象序列化流的问题;
    2. /*
    3. 1,用对象序列化了一个对象后,假如我们修改了对象所属的类文件,读取数据会出现问题吗?
    4. 会出现问题,抛出 InvalidClassException 异常
    5. 2,出问题了,如何解决?
    6. 给对象所属的类加一个SerialVersionUID
    7. private static final long serialVersionUID =42L;
    8. 3,如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?
    9. 给该成员变量加transient关键字修饰,该关键字标记的成员变量不再参与序列化过程
    10. */
    11. import java.io.*;
    12. public class Demo {
    13. public static void main(String[] args) throws IOException, ClassNotFoundException {
    14. // write();
    15. read();
    16. }
    17. //反序列化
    18. private static void read() throws IOException, ClassNotFoundException {
    19. ObjectInputStream ois = new ObjectInputStream(new FileInputStream("idea_text\\oos.txt"));
    20. Object obj = ois.readObject();
    21. Student s=(Student) obj;
    22. System.out.println(s.getName()+","+s.getAge());
    23. ois.close();
    24. }
    25. //序列化
    26. private static void write() throws IOException {
    27. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("idea_text\\oos.txt"));
    28. Student s= new Student("程序员",20);
    29. oos.writeObject(s);
    30. oos.close();
    31. }
    32. }

  • 相关阅读:
    快速掌握keepalived
    配置java.net.DatagramSocket.setReceiveBufferSize()实现springboot接收过长UDP消息
    Spring --- AOP 操作 - AspectJ注解
    newstarctf
    【读论文】DIVFusion: Darkness-free infrared and visible image fusion
    AtCoder—C - ABC conjecture
    Java笔记:ThreadLocal
    模拟卷Leetcode【普通】061. 旋转链表
    Linux上的Redis客户端软件G-dis3
    Redis】Redis主从复制(二)————主从结构/流程
  • 原文地址:https://blog.csdn.net/z2021_000000/article/details/125525606