JavaAPI3(I/0流与反射)

第三章:I/0
1、文件File
  (1)构造方法
     File(String pathName) :用指定的文件路径构造文件
     File(String dir,String subpath):在指定目录下创建指定文件。
  (2)常用方法
     新建空文件:createFile()
     新建空目录:mkdir()
    新建包括父目录的目录:mkdirs()
    删除指定文件:delete()
    判断是否是文件:isFile()
    判断是否是目录:isDirectory()
    判断文件或目录是否存在:exists()
    获取文件或目录名字:getName()
    获取文件或目录路径:getPath()
     获取文件或目录绝对路径:getAbsolutePath()
     获取文件或目录的最后修改日期:lastModified()
     获取文件或目录的字节大小:lenth()
2、流
  (1)作用:读写文件
     含义:流是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道
     概念:读文件是指把文件中的数据读取到内存中;写文件是把内存中的数据写到文件中。
        输入流是将数据输入到内存;输出流则是将数据从内存中输出。
        字节流是8位通用字节流;字符流是16位Unicode字符流。
        字节流直接操作文件,即使不使用close关闭流,文件也能输出;而字符流通过缓存再操作文件,必须关闭流或者flush强制刷新
  (2)分类
    1>按流向分:输出流(OutputStream和Writer作为基类)和输入流(InputStream和Reader作为基类)
    2>按处理数据单元分:字节流(InputStream和OutputStream作为基类)和字符流(Reader和Writer作为基类)
 (3)1>字节流(中文会乱码)
      输入:InputStream fis=new FileInputStream(file);   //file不存在(无输出)
         int data=fis.read();
        while (data!=-1){
           System.out.print((char)data);
           data=fis.read();
         }
      输出:OutputStream fos=new FileOutputStream(file,true); //file不存在(自动创建)
        String str=“hello world”;
         byte bytes[]=str.getBytes();
         fos.write(bytes);
         fos.flush();
    2>字符流:读取文本文件的效率高(中文会乱码)
      输入:Reader fr=new FileReader(file); //file不存在(运行异常:系统找不到指定的文件)
        StringBuffer sb=new StringBuffer();
        char chars[]=new char[(char)file.length()];
         fr.read(chars);
         for(int i=0;i<chars.length;i++){
            sb.append(chars[i]);
         }
         System.out.println(sb);
      输出:Writer fw=new FileWriter(file,true); //true是否追加;file不存在(自动创建)
         String str=“JAVA”;
         fw.write(str);
         fw.flush();
    3>字符流处理中文乱码:
      //txt文件ANSI,程序可正常读取,也可设置为gbk;txt文件UTF-8,设置为UTF-8
      输入:InputStreamReader isr=new InputStreamReader(new FileInputStream(file),“UTF-8/gbk”);
      输出:OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(file,true),“UTF-8/gbk”);
    4>缓冲流
     输入:BufferedReader br=new BufferedReader(new FileReader(file)/new InputStreamReader(new FileInputStream(file),“UTF-8/gbk”));
        String str=br.readLine();
         while (str!=null){
           System.out.println(str);
           str=br.readLine();
         }
      输出:BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,true),“UTF-8”));
         bw.write(“你好”);
         bw.newLine(); //换行
         bw.write(“JAVA”);
         bw.flush();
    5>二进制流(属于字节流,可以读取图片,读取文本同1)
     DataInputStream dis=new DataInputStream(new FileInputStream(“D:\mao.jpg”));
     DataOutputStream dos=new DataOutputStream(new FileOutputStream(“D:\gou.jpg”));
     int read=dis.read();
      while (read!=-1){
       dos.write(read);
        read=dis.read();
      }
    6>对象流(前提是实体类实现Serializable接口)
     序列化:把对象写到文件
         ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(“students.txt”));
         oos.writeObject(Student/ArrayList/Map);
         oos.flush();
     反序列化:从文件读取对象
          ObjectInputStream ois=new ObjectInputStream(new FileInputStream(“students.txt”));
          Student stu=ois.readObject();/ArrayList list=ois.readObject();/Map maps=(Map)ois.readObject();
3、反射:
  (1)概念:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
  (2)作用:java反射机制编译时并不确定那个类被加载了,而是在程序运行时才加载,探知使用,这样的特点就是反射。
    1>在运行时判断任意一个对象所属的类型。
    2>在运行时构造任意一个类的对象。
    3>在运行时判断任意一个类所具有的成员变量和方法。
    4>在运行时调用任意一个对象的方法,甚至可以调用private方法。
 (3)注:任何类都是Class的实例对象;反射都是在运行时环境中,而不是在编译时环境中。
    public class ClassDemo {
      public static void main(String[] args) {
        Foo obj=new Foo();
        //Class cl=obj.getClass();
        System.out.println(obj.getClass().getName());     //obj.getClass().getName()类的名称。 输出:api.io.Foo
        Method methods[]=obj.getClass().getMethods();    //obj.getClass().getMethods()类的方法的集合
        for(int i=0;i<methods.length;i++){
           System.out.println(methods[i]);      //输出:public void api.io.Foo.show(java.lang.String,int)
           System.out.println(methods[i].getReturnType());   //methods[i].getReturnType()方法的返回值类型。 输出:void
           System.out.println(methods[i].getName());     //methods[i].getName()方法的名称。 输出:show
            Class parameterTypes[]=methods[i].getParameterTypes();    //methods[i].getParameterTypes()方法的参数的集合
           for(Class c:parameterTypes){
              System.out.println(c.getName()+"?");        //java.lang.String?int
            }
        }
      }
    }
    class Foo {
        public void show(String name,int age){}
    }
    在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值