zoukankan      html  css  js  c++  java
  • JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)

    1.流的简述及演示案例
    输入流和输出流相对于内存设备而言.
    将外设中的数据读取到内存中:输入
    将内存的数写入到外设中:输出。
    字符流的由来:
    其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。
    在对这个文字进行操作。简单说:字节流+编码表
    字节流的两个顶层父类:
    1,InputStream 2,OutputStream.
    字符流的两个顶层父类:
    1,Reader 2,Writer

    String filePath = "F:\demo.txt";
    FileWriter fw = new FileWriter(filePath,true);
    /*
    * 调用Writer对象中的write(string)方法,写入数据。
    *
    * 其实数据写入到临时存储缓冲区中。
    *
    */
    fw.write("abcdehahaha");
    //
    fw.write("xixi");
    /*
    * 进行刷新,将数据直接写到目的地中。
    */
    fw.flush();

    //1,创建读取字符数据的流对象。
    /*
    * 在创建读取流对象时,必须要明确被读取的文件。一定要确定该文件是存在的。
    *
    * 用一个读取流关联一个已存在文件。
    */
    FileReader fr = new FileReader("demo.txt");
    //第一种方式读取
    // int ch3 = 0;
    // while((ch3=fr.read())!=-1){//使用read()循环一个个字符读取
    // System.out.print((char)ch3);
    // }

    //第二种方式读取
    // char[] buf = new char[1024];
    // int len = 0;
    // while((len=fr.read(buf))!=-1){
    // System.out.println(new String(buf,0,len));
    // }
    //第三种方式读取
    BufferedReader bufr = new BufferedReader(fr);
    String line = null;
    while((line=bufr.readLine())!=null){
    System.out.println(line);
    }
    fr.close();

    2.用缓冲区方法buffer读写文件
    //读取demo,写入demowrite
    String readFilePath = "F:\demo.txt";
    String writeFilePath = "F:\demowrite.txt";
    FileReader fr = new FileReader(readFilePath);
    BufferedReader bufr = new BufferedReader(fr);
    FileWriter fw = new FileWriter(writeFilePath);
    BufferedWriter bufw = new BufferedWriter(fw);
    String line = null;
    while ((line = bufr.readLine()) != null) {
    bufw.write(line);
    bufw.newLine();
    bufw.flush();
    }
    bufw.close();
    bufr.close();

    3.LineNumberReader
    String readFilePath = "F:\demo.txt";
    FileReader fr = new FileReader(readFilePath);
    LineNumberReader lnr = new LineNumberReader(fr);
    String line = null;//LineNumberReader比BufferedReader多了个功能,就是可以返回当前行号。另外setLineNumber能改变行号,却不能改变读的位置。
    lnr.setLineNumber(1);//getLineNumber()显示的行号会从2开始
    while((line=lnr.readLine())!=null){
    System.out.println(lnr.getLineNumber()+":"+line);
    }
    lnr.close();


    4.File类对象的使用
    File file = new File("F:\");
    System.out.println("getFreeSpace:"+file.getFreeSpace());//获取F盘的剩余空间
    System.out.println("getTotalSpace:"+file.getTotalSpace());
    System.out.println("getUsableSpace:"+file.getUsableSpace());
    //
    File[] files = File.listRoots();//获取电脑的磁盘
    //
    for(File file2 : files){
    //
    System.out.println(file2);
    //
    }

    //重命名,将demo.txt重命名为demowrite1
    File f1 = new File("F:\demo.txt");
    File f2 = new File("F:\demowrite1.txt");
    boolean b = f1.renameTo(f2);
    System.out.println("b="+b);


    // 文件的创建和删除。
    File file = new File("F:\file.txt");
    /*
    * 和输出流不一样,如果文件不存在,则创建,如果文件存在,则不创建。
    */
    //
    boolean b = file.createNewFile();
    System.out.println("b=" + b);
    FileWriter writer = new FileWriter(file);
    writer.write("aaa");
    writer.flush();
    writer.close();

    boolean b1 = file.delete();

    System.out.println("b1=" + b1);

    5.Serializable标记接口
    Serializable:用于给被序列化的类加入ID号。
    用于判断类和对象是否是同一个版本。
    public class Person implements Serializable {
    /**
    * transient:非静态数据不想被序列化可以使用这个关键字修饰。
    */
    private static final long serialVersionUID = 9527l;
    private transient String name;
    private static int age;

    public Person(String name, int age) {
    this.name = name;
    this.age = age;
    }

    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;
    }
    }
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.object"));
    // 对象序列化。 被序列化的对象必须实现Serializable接口。
    oos.writeObject(new Person("小强", 30));
    oos.close();

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.object"));
    // 对象的反序列化。
    Person p = (Person) ois.readObject();
    System.out.println(p.getName() + ":" + p.getAge());
    ois.close();


  • 相关阅读:
    重定向请求
    json处理
    post请求
    get请求
    提交cookie登录
    进击的Python【第三章】:Python基础(三)
    进击的Python【第二章】:Python基础(二)
    进击的Python【第一章】:Python背景初探与Python基础(一)
    java 内存分析
    java--循环练习
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4109934.html
Copyright © 2011-2022 走看看