达内javaSE_day12 学习笔记 —— IO流
程序员文章站
2022-05-25 21:16:04
...
javaSE_day12
- IO流
- 1. File类
- 2. IO: Input 、 Output
- 2.1 分类
- 2.2 核心方法
- 2.3 操作的数组类型
- 2.4 使用步骤
- 2.5 文件字节输入输出流——FileInputStream和FileOutputStream
- 2.6 对象输入输出流——ObjectInputStream 和ObjectOutputStream
- 2.7 文件字符输入输出流——FileReader和FileWriter
- 2.8 缓冲流——BufferedReader 和 BufferedWriter
- 2.9 打印流——PrintWriter
- 2.10 转换流——InputStreamReader和 OutputStreamWriter
- 2.11 RandomAccessFile类:输入流和输出流是一个流对象
- 3. 线程
IO流
1. File类
- 创建对象时,不能创建文件夹和文件,只是对文件的一个描述
1.1 构造方法创建对象的三种格式
//构造方法创建对象的三种格式
public static void test1(){
File file =
new File("c:\\a\\b\\a.txt");//方式1
File file2 =
new File("c:\\a\\b","a.txt");//方式2
File path =
new File("c:\\a\\b");
File file3 =
new File(path,"a.txt");//方式3
System.out.println(file+","+file2+","+file3);
}
1.2 文件夹的创建和删除
- mkdir:创建一个文件夹
- mkdirs:创建多个文件夹
-
delete:删除一个文件夹,若有多个文件夹,则delete多次即可
1.3 创建文件
- exists():判断文件是否存在
-
createNewFile():新建文件
1.4 常用方法
2. IO: Input 、 Output
2.1 分类
-
按照流的读写方式
字节流- InputStream:由abstract修饰 ,(字节流输入的父类)
- OutputStream 由abstract修饰,(字节流输出的父类)
字符流
- Reader : 由abstract修饰 ,(字符流输入的父类)
- Writer 由abstract修饰,(字符流输出的父类)
都由abstract修饰,本身不能创建对象
-
按照流的方向
输入流、输出流 -
按照是否能直接操作数据文件
节点流:直接在构造方法中来传入要读写的文件对象或文件名。
处理流:不能直接在构造方法中来传入要读写的文件对象或文件名。
2.2 核心方法
- 输入流的核心方法:read()
- 输出流的核心方法:write()
2.3 操作的数组类型
- 字节流:byte类型
- 字符流:char类型
2.4 使用步骤
(1)选择流类(输入还是输出)
(2)确定方法(read还是write)
(3)关闭流 close
2.5 文件字节输入输出流——FileInputStream和FileOutputStream
2.6 对象输入输出流——ObjectInputStream 和ObjectOutputStream
用ObjectinputStream读写对象时要求对象所在的类是序列化的类。
- 对象的序列化:把对象转换成二进制的流,写到数据文件
- 对象的反序列化:将数据文件中二进制的流代表的数据恢复为对象
-
***:在 序列化存储/反序列化读取或者是序列化传输/反序列化接收 时,JVM 会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
eg:
2.7 文件字符输入输出流——FileReader和FileWriter
- 练习
/**
* FileReader和 FileWriter
* @author Dell
*/
public class Demo3 {
//练习:复制fw.txt内容到fw1.txt文件中
public static void test3() throws IOException {
//读
File file = new File("fw.txt");
if (!file.exists()) {
file.createNewFile();
}
FileReader fr = new FileReader(file);
char[] buf = new char[(int) file.length()];
fr.read(buf);
//写
FileWriter fw = new FileWriter("fw1.txt");
fw.write(buf);
fw.close();
fr.close();
}
public static void main(String[] args) throws IOException {
test3();
}
}
2.8 缓冲流——BufferedReader 和 BufferedWriter
- BufferedReader:
- readLine() 返回一行,如果返回值为null,说明文件内容读取完毕
- BufferedWriter:换行时只能在字符串后面跟\n
2.9 打印流——PrintWriter
println() 换行
2.10 转换流——InputStreamReader和 OutputStreamWriter
2.11 RandomAccessFile类:输入流和输出流是一个流对象
对象声明:RandomAccessFile raf = newRandomAccessFile(File file, String mode);
其中参数 mode 的值可选 “r”:可读,“w” :可写,“rw”:可读性;
- r :输入流
- rw :既可以作为输入流,也可以作为输出流
3. 线程
- 程序:静态的代码
- 进程:程序动态的执行过程
-
线程:动态执行的过程,是进程内最小的执行单位,
进程有直接独立的内存
线程共享进程的资源,在进程内,每个线程可以完成独立的功能
eg: 线程之间实际上轮换执行
package cn.tedu.thread;
class T extends Thread{
//线程完成的功能代码要写到线程体方法中,run()
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.println("hello");
}
}
}
class T2 extends Thread{
//线程完成的功能代码要写到线程体方法中,run()
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.println("Thread");
}
}
}
public class MyThread {
//主线程
public static void main(String[] args) {
T t1 = new T();
T2 t2 = new T2();
t1.start();
t2.start();
}
}
推荐阅读