IO
IO: 输入输出 — 写/读
文件
(1)java里IO操作最多的对象
(2)java.io.File类封装了文件对象File类
- File对象代表一个路径下的文件或文件夹
- File类创建
- 绝对路基
File f1 =new File("C:\qin.txt");
- 相对路径
File f2 =new File("qin.txt");
- 拼接路径
File f3 =new File("C:\","qin.txt"); \\文件 c:\qin.txt
- 绝对路基
File对象常用方法
和文件名相关
String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo(File newName)
文件检测
boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute()
获取常规文件信息
long lastModified() long length() boolean delete()
目录操作
boolean mkdir() String[] list()
IO流
- java的IO都是通过流来实现的。
流:一种有顺序的,有起点和终点的字节或字符集合。
本质:流就是数据管道流的分类
按照输入输出分类
- 输入流 :从文件里读取数据,写入管道
- 输出流 :从管道里读取数据,写入文件
按照操作单位
- 字节流: 按照字节为单位,传输 — 所有文件通吃
- 字符流: 按照字符为单位,传输 — 只能对字符文件有效,更有效的发挥缓存区的作用
字节流:InputStream类 和 OutputStream类
InputStream类是所有字节流输入类的父类
其中包含的主要方法:public void close() throws IOException 功能:关闭当前流对象,释放资源 public int read(byte[] b) throws IOException 功能:按照流中的数据存储顺序依次进行读取,最小单位是字节(byte) public long skip(long n) throws IOException 功能:跳过和丢弃此输入流中数据的 n 个字节
OutputStream类是所有字节输出类的父类
其中包含的主要方法:public int flush() throws IOException 功能:将当前流对象中的缓冲数据强制输出,即实现立即输出效果。 public void close() throws IOException 功能:关闭当前流对象,释放资源 public int write(byte[] b) throws IOException 功能:按照数组b存储顺序依次写入流中,最小单位是字节(byte)
字符流
- Reader类是所有字符流输入类的父类
Reader类包含的主要方法与InputStream类似,功能大致相同,最大区别是读取数据的单位是字符(char) - Writer类是所有字符流输出类的父类
Writer类包含的主要方法与OutputStream类似,功能大致相同,最大区别是写入数据的单位是字符(char)
Writer相比OutputStream增加的部分方法:
append 方法:将数据写入流的末尾
write方法:增加了写入字符串的方法
- Reader类是所有字符流输入类的父类
有缓冲读写 BufferedReader/BufferedWriter
在IO操作时,为了提高IO类的读写效率,提供了一类缓冲流,以便提高读写效率。
BufferedInputStream/BufferedOutputStream
BufferedReader/BufferedWriter
利用BufferedReader/BufferedWriter实现文件的拷贝操作BufferedReader fbufread = new BufferedReader(new FileReader("d:\\a.txt")); BufferedWriter fbufwrite = new BufferedWriter(new FileWriter("d:\\b.txt")); String buf = null; while((buf = fbufread.readLine()) != null) { fbufwrite.write(buf); fbufwrite.write("\r\n"); }
验证:
- IO操作的计数
- System.currentTimeMillis 分别获取读取前和读取后的时间
进程和线程
进程和线程
进程:当前内存中运行的应用程序,有自己独立的内存空间。
- 进程可以启动多个多个线程,必须有一个主线程。
线程:是进程中的一个单独执行流程。
- 属于进程,也叫轻量级进程
- 没有独立内存空间,同一个进程下的线程共享内存空间和资源
- 为了实现并发,宏观上是并发的,微观上是串行的。
Java线程模型
- 代码执行需要三个条件
- cpu
- 代码(指令)
- 数据
- 代码执行需要三个条件
java线程的创建
- 继承Thread类,重写run方法(方法run( ) 称为线程体)
- 实现runnable接口,重写run方法
两种线程创建方式的比较
使用Runnable接口
可以将CPU,代码和数据分开,形成清晰的模型;
还可以从其他类继承;保持程序风格的一致性。
直接继承Thread类
不能再从其他类继承;
编写简单,可以直接操纵线程,无需使用Thread.currentThread()。
线程的5中状态
- 创建状态 — 创建了一个线程对象
- 就绪状态 — 执行了start方法,等待获得cup执行run方法
- 执行状态 — 当前线程获得cpu资源,执行run方法
- 阻塞/等待/退让状态 — run方法没有执行完,等待IO操作、执行join方法、执行了wait方法,yield方法,主动放弃cup,给其他线程
- 死亡状态 — 线程释放
变化:
- 创建状态 — new方法
- 创建–>就绪 — start方法
- 就绪–>运行 — 获得cpu
- 运行–>等待 — sleep、join、wait 、yield方法,主动放弃cup
- 等待–>就绪 — 睡眠时间到,另外一个进程执行文,等待事件完成、
- 运行–>死亡
- 正常死亡 run方法运行完成
- 调用了stop方法 (不推荐使用,容易造成死锁)