JAVA020--IO流

IO流

  1. 按照方向分为输出输入流
  2. 按照处理数据的最小单位分为字符流和字节流

字节流

package com.lovo.test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TestByteStream {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //1、字节流
        //声明流
        InputStream in = null;
        OutputStream out = null;
        try {
            //创建流
            in = new FileInputStream("D:" + System.getProperty("file.separator") + "lileihanmeimei.mp3");
            out = new FileOutputStream("E:" + System.getProperty("file.separator") + "j124.mp3");

            //操作流
//          int b = 0;
//          while((b = in.read()) != -1){
//              out.write(b);
//          }

            byte[] b = new byte[1024];
            int length = 0;
            while((length = in.read(b)) != -1){
                out.write(b,0,length);
                out.flush();//冲刷
            }


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            //关闭流
            if(in != null){
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(out != null){
                try {
                    out.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    }

}

字符流

package com.lovo.test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

import javax.swing.JOptionPane;

public class TestCharStream {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //字符流
//      String msg = JOptionPane.showInputDialog("请输入‘白日依山尽’的下一句:");
//      
//      Writer w = null;
//      
//      try {
//          w = new FileWriter("poem.txt");
//          char[] b = msg.toCharArray();
//          w.write(b);
//          w.flush();
//      } catch (IOException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      } finally{
//          if(w != null){
//              try {
//                  w.close();
//              } catch (IOException e) {
//                  // TODO Auto-generated catch block
//                  e.printStackTrace();
//              }
//          }
//      }


        Reader r = null;        
        try {
            String result = "";
            r = new FileReader("poem.txt");
            char[] c = new char[10];
            int length = 0;
            while((length = r.read(c)) != -1){
                String str = new String(c, 0, length);
                result += str;
            }
            System.out.println(result);

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(r != null){
                try {
                    r.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

文件流

package com.lovo.test;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestFile {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //File是JDK中专门用来表示文件或文件夹的类
        File f1 = new File("D:" + File.separator + "HelloWorld.class");
        File f2 = new File("D:" + File.separator + "test14");
        System.out.println(f2.isFile());//判断File对象是否是文件 
        System.out.println(f2.isDirectory());//判断File对象是否是文件夹

        File f3 = new File("D:" + File.separator + "HelloWorld.txt");
        System.out.println(f3.exists());//判断File对象代表的文件或文件夹是否存在
        if(!f3.exists()){
            try {
                f3.createNewFile();//创建新文件
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else{
            f3.delete();//删除文件或文件夹
        }

        File f4 = new File("D:" + File.separator + "J124");
        if(!f4.exists()){
            f4.mkdir();//创建新文件夹
        }else{
            f4.delete();//删除文件或文件夹
        }

        //探究文件
        System.out.println(f1.getName());//得到文件名
        System.out.println(f1.getAbsolutePath());//得到绝对路径
        System.out.println(f1.isHidden());//判断是否是隐藏文件
        System.out.println(f1.canExecute());//判断是否是可执行文件
        System.out.println(f1.canRead());//判断是否是可读文件
        System.out.println(f1.canWrite());//判断是否是可写文件
        System.out.println(f1.length());//得到文件大小,单位字节
        Date lm = new Date(f1.lastModified());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
        System.out.println(sdf.format(lm));//得到上次修改时间

        //探究文件夹
        if(f2.isDirectory()){
//          String[] subFileNames = f2.list();//得到文件夹下面所有子文件和子文件夹的名字
//          for(String subFileName : subFileNames){
//              System.out.println(subFileName);
//          }

            File[] subFiels = f2.listFiles();//得到文件夹下面所有子文件和子文件夹的File对象
            for(File subFile : subFiels){
                System.out.println(subFile.getAbsolutePath());
            }
        }


    }

}

对象流

package com.lovo.test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

import com.lovo.bean.Student;

public class TestObject {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //对象的序列化--将对象以二进制的形式输出(没有确定输出到哪儿去)
//      ArrayList<Student> al = new ArrayList<Student>();
//      Student stu0 = new Student("HJ", 25,"四川","成都","九眼桥第三桥洞");
//      Student stu1 = new Student("YP", 27,"四川","成都","九眼桥第2桥洞");
//      al.add(stu0);
//      al.add(stu1);
//      
//      ObjectOutputStream oos = null;
//      
//      try {
//          oos = new ObjectOutputStream(new FileOutputStream("student.data"));
//          oos.writeObject(al);
//      } catch (FileNotFoundException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      } catch (IOException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }finally{
//          if(oos != null){
//              try {
//                  oos.close();
//              } catch (IOException e) {
//                  // TODO Auto-generated catch block
//                  e.printStackTrace();
//              }
//          }
//      }


        //反序列化--将输入的二进制流转换为对象(同样不确定二进制流的数据源)
        ArrayList<Student> al = null;
        ObjectInputStream ois = null;

        try {
            //使用了装饰器模式
            ois = new ObjectInputStream(new FileInputStream("student.data"));       
            al = (ArrayList<Student>)ois.readObject();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            if(ois != null){
                try {
                    ois.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        System.out.println(al.get(0));
        System.out.println(al.get(1));
    }

}

student代码部分

package com.lovo.bean;

import java.io.Serializable;

//Serializable接口是一个标示接口,相当于给类打上一个标志允许参与序列化和反序列化
public class Student implements Serializable{

    private String name;

    private int age;

    private Address address;

    public Student(){

    }

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



    public Student(String name, int age, String state,String city,String street) {
        super();
        this.name = name;
        this.age = age;
        this.address = new Address(state,city,street);
    }

    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() {
        // TODO Auto-generated method stub
        return this.name + ":" + this.age + ":" + this.address;
    }
}

address代码部分

package com.lovo.bean;

import java.io.Serializable;

public class Address implements Serializable{

    private String state;

    private String city;

    private String street;

    public Address(){

    }

    public Address(String state, String city, String street) {
        super();
        this.state = state;
        this.city = city;
        this.street = street;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return this.state + "-" + this.city + "-" + this.street;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值