本帖最后由 小石姐姐 于 2018-4-24 16:10 编辑
随手记
File类,File类主要就是操作文件的类,可以读取文件,写入文件,它创建对象指向的是抽象的文件夹或者是文件。 构造方法如下: 1、File f = new File("D:\a.txt");//指向D盘下的a.txt文件 2、File f1 = new Fiel("D:\","a.txt");//分开的方式 3、File f2 = new File(new File(),"a.txt");//传入一个File对象 成员方法: 创建功能———————————— getAbsoluteFile(); getAbsolutePath(); list(); CreadtNewFile();//创建文件 mkdir()//创建单层目录 mkdirs()/创建多层目录 delete();删除文件+目录(只能删除空的目录) 判断功能———————————— exists();//判断文件或目录是否存在 isAbsolute()//判断File对象是否是绝对路径 isDirector();//判断是否是一个文件目录 isFile();//判断是否是一个文件 获取—————————————— getAbsolutePath();//获取绝对路径 IO流的分类: 按流分 输入流 输出流 按类型分类 字符 FileReader FileWriter 字节 InputStream OutputStream io更仔细的分类 Reader //读取字符流的抽象类 1)InputStream//字节输入 ObjectInputStream //对象输出流 FileReader//普通字符输出流 2)InputStreamReader//把字节转换成字符的类 ObjectOutputStream//对象输出流 3)BufferedReader//缓冲字符输入流 Writer//写入字符的抽象类 OutputStream//字节输入流 FileWriter普通输入流 OutputStreamWriter();//字符转换流,将字节转换成字符 InputStreamReader()将字节输入流转换为字符输入流 特殊读写对象(按字节读取): ObjectInputStream(); ObjectOutputStream(); 对象输出流//用来读写任意类型的对象 ObjectOutputStream 对象输入流 ObjectInputStream 只有实现序列化接口才可以读取对象serializable java.io.serializable writerObject(); //打印流 继承Object printWriter 构造 PrintWriter pw = new PrintWriter(File f); 写入到制定文件中‘ 特点:不能写入字节,但是能够写输出流中转换后的OutputStream 标准打印流 构造方法中可以文件路径 传入一个写入字节流(把字符转换为字节写入到文件中) PrintOutputStream。 标准字节输入流 InputStream ==引用数据类型作为返回值 public static final InputStream in;//用来读取键盘录入的数据 标准字节输出流 public static final printStream out;//将字节打印到命令行 注意: 1、字节流 OutputStream os = System.out; //注意os只能写Byte 写的时候把String 转换成byte 通过"ZZZZ".getBytes(); 2、转换流 如何把字节输出转化成字符输出,通过OutputStreamWriter ;它是FileWriter的父类 OutputStreamWriter是不能够直接读写,要通过流来读写,写构造方法时就要传入一个流 如: 创建一个字节流同过OutputStreamWriter进行转换写到控制台 OutputStreamWriter的父类为Wrtier OutputStreamWriter osw = new OutputStreamWriter(new OutputStream(System.out)); InputStreamReader//将字节转换成字符 不能直接读取,只能传入字节读取通过InputStreamReader进行转换,读取到的数据就会从字转换成字符 3、打印流 PrintStream//System.out 字节打印流 PrintWriter 字符打印流 不能输出字符,可以输出其他任意类型 可以实现自动刷新(println) 构造里面添加True 可以把字节输出流转换成字符输出流 底层实现 new BufferedWrtier(new OutoputStreamWriter(new FileWriterStream(File file))) 从然后把字符转换成字节高效写入!!!!!!!?到底是通过Buffer写还是通过FileWriter写 Perporties存储的都是字符串,实现了Hashtable,是一个持久性的属性集 可以有hashmap的功能 成员方法: put(object,object); p.list() 配合打印流写数据到文件中 p.load()配合读取对象 读取键值对 ,通过entry对象。 线程 线程是程序中的执行线程,允许应用程序并发运行多个程序,效率高,安全性低 只能做一件事情,效率低,安全性高 Cpu执行程序是随机性的 创建线程的两种方式 1.直接让类实现Runnable 2.让类继承Thread重写run方法 IP地址 InetAddress 表示就是Ip地址,是一种低级协议,包含ipv4 32个字节,ipv6128个字节,udp跟tcp都是在它的基础上构建的, InetAddress没有构造方法 子类包括Inet4Address 和 Inet6Address 静态方法InetAddress.getByName(String host) //hos可以写主机名和ip 主机名可能是重复的,所以建议host填写ip getLocalhost()//获取本机的ip对象 getHosetName();//获取ip的主机名 getHostAddress();获取ip地址 getByname();根据主机名获取ip 根据ip获取主机名 UDP协议 特点,没有链接,不可靠,但是效率高,每次发送数据要先打包,发送的限制为64kb TCP协议 有链接,可靠,速度慢。 步骤: 客户端 创建客户端通信端点 创建outputStream 准备数据并写入流中 关闭资源 服务端 创建服务端通信端点 进行监听 创建InputStream 读取数据 关闭资源 反射 java反射机制在运行状态下,对任意类都能操作他的所有属性和方法,对任何对象也都能操作他的属性和方法,这种动态获取调用对象属性和方法,成为java反射机制。 反射的前提是需要获取字节码 三种方式: 1、通过对象进行掉用。 Student s = new Student() s.getClass(); --- 2、通过对象进行调用 Student.class(); --- 3、通过包名进行调用 Class.forName("包名"); //演示获取公共字段 Feild f = clazz.getField(); Class clazz = Class.forName("case1.Student"); 通过字节码创建对象 Object o = clazz.newInstance(); //返回Object类型 获取公共字段对象 Feild f = clazz.getFeild("字段名称"); f.set(i,"张三"); Constructors [] constructor = getConstructors(); Object o = f.get(stu); 根据对象获取成员属性并设置 Feild[] feilds =clazz.DeclaredFeilds();//暴力返回所有成员变量 Feild feilds = clazz.DeclaredFeids(字段)暴力返回字段的对象 获取学生类的字节码对象 Class clazz = Class.forName("itheima_01.Student"); 获取带参数构造 Constructor con = clazz.getConstrctor(String.class,int.class); //根据构造创建对象 Object o = con.newInstance("张三",11); //暴力获取字段 Field field = clazz.getDeclaredField(); //设置字段 field.set(o,"李四"); setAccesible(true);//设置取消检查 syso(o); javaBean其实就是类,用来存储数据。一般使用公共进行修饰,私有成员变量,为成员提供get和set方法。序列化接口 BeanUtils.populate(obj,map);//利用反射从map中的key暴力对象的字段,进行暴力设置
|