IO * File类:提供了对当前文件系统中文件的部分操作 * file.canExcuse() file.canRead() file.canWrite() 判断文件属性,都会返回boolean类型 * file.exists() file.getName() file.getAbsolutePath()获取绝对路径 file.getParent()获取父类路径,无论文件是否存在,只要给定具体路径,都可以返回文件名称 * file。mkdir()船舰单级目录 file.mkdirs()创建多级目录 * 文件遍历的时候会报空指针,原因是某些文件可能没有访问权限 * 在java中如果要独写文件的话,需要用到流 * 流表示从一个文件将数据返回到另一个文件,包含流向的问题 * 最终需要选择一个参照物,当前程序为参照物,从一个文件中读取数据到程序叫输入流 * 从程序输出数据到到另一个文件叫输出流 *注意:当编写IO流程序的时候一定要注意关闭流 * 步骤:创建合适的IO流对象 * 创建对象 * 传输数据 * 关闭流对象() * 添加缓冲区的方式进行读取数据,每次会将数据添加到缓冲区中,当缓冲区满了之后一次读取,而不是每个字节读取一次 * 字符流可以直接读取中文汉字,而字节流会出现中文乱码 * 当某一个输出流对象中带有缓冲区,就需要进行flush * 如果要将对象通过IO流进行传输那么必须要实现序列化接口,当前类中要声明一个serialVersionUID的值 * transient关键字修饰变量,在进行序列化的时候,不会被序列化 * * 多线程 * 实现多线程: * 需要继承Thread类 * 必须重写run方法,指的是核心执行逻辑 * 线程启动的时候,不要直接用run方法,二十通过start()来进行调用 * 每次运行相同的代码,出来的结果可能不一样,原因是多线程谁先抢占资源无法进行人为控制 * 实现方式二:使用了代理设计模式 * 实现Runnable接口 * 重写run方法 * 创建Thread对象,将刚刚创建好的runnable子类实现作为thread构造参数 * 通过thread.start()进行启动 * 推荐使用第二种方式,因为 * Java是单继承将继承关系留给最需要的类 * 使用Runnable接口之后不需要给共享变量添加static关键字,每次创建一个对象作为共享对象即可 * 使用接口的方式,每次只创建一个共享对象,所有的线程能够实现资源共享 * 数据不一致的问题,解决方法:线程同步public class ThreadDemo implements Runnable { @Override public void run(){ for (int i=0;i<=10;i++){ System.out.println(Thread.currentThread().getName()+"-----"); } } public static void main(String[] args) { for (int i=0;i<=5;i++){ System.out.println(Thread.currentThread().getName()+"----"); } ThreadDemo threadDemo=new ThreadDemo(); Thread thread=new Thread(threadDemo); thread.start(); } }



