本帖最后由 李松松 于 2018-11-26 15:09 编辑
day07-10学习日记
day07线程
线程通新概念
多个线程操作共享的资源,每个线程执行的任务不同,需要相互协作,依赖线程间通信
等待唤醒机制
调用wait:1.释放锁 2.进入WAITING状态
离开WAITING 1.获取锁 2.等待CPU调用执行
wait()
wait(long millis)
notify()
notify()
函数式编程相对于面向对象的优点
面向对象:注重对象的调用方法(语法格式)
函数式:注重输入什么(参数),得到什么结果(运行代码)
Lamabda表达式格式
(参数列表)->{一段代码}
Lanabda的使用前提
1.lambda只适用于“函数式接口”(有且有一个抽象方法)
2.必须具有上下文的推导
可以省略的部分:
1. (参数列表): 参数"类型"可以省略 (a, b) -> {}
2. (参数列表): 如果参数只有1个, 则"类型"和"小括号"都可以省略 a -> sout(a)
3. {一些代码}: 如果只有一条代码, 则"大括号", "return", "分号"都可以"一起省略"
day08
File对象的创建方式
File(path)
File(parent,child)
File(File parent,child)
dile类获取名称的方法名称
getName()
File类获取对对路径的方法名称
getAbsolutePath()
File类判断是否是文件的方法名称
isFile()
File类判断是否是文件夹的方法名称
isDirectory()
相对路径和绝对路径的区别
绝对路径:以盘符开头
相对路径:不以盘符开头 IDEA相对于项目根目录
遍历文件夹
(File dir)
File[] files = dir.listFiles();
for (File file : files) {
if (file.isFile()) {
// 对文件处理
} else {
递归调用方法传递file对象
}
}
递归的含义
代码:方法内部调用方法自己
思想: 大问题, 拆解成不同的小问题, 小问题继续拆解成不同的小问题, 直到小问题都能解决, 大问题也就迎刃而解
递归的方式计算5的阶乘
int jc(int n) {
if (n == 1) {
return 1;
}
return n * jc(n-1);
}
java.io.FileFilter接口: 用于File对象的过滤器
boolean accept(File pathName): true则会将参数的File对象加入返回的File[], false则不加入
java.io.FilenameFilter接口:
boolean accept(File dir, String name): true则会将参数的File对象加入返回的File[], false则不加入
day09
IO流的分类和功能
按操作的数据分
字节流:操作 byte byte[ ]
字符流:操作char char[ ] String
按方向分
输入流;度
输出流:写
使用字节输出流写出数据到文件
字节输出流OutputStream FileOutputStream
1.创建流对象
2.调用write()写数据:一个字节,一个字节数组
3.释放资源close()
使用字节输入流读取数据程序
字节输入流:InputStrram FileInputStream
1.创建流对象
2.调用 read():一次读一个字节 read(byte[ ]bytes)一次读一个字节数组
3.释放资源
读取数组read(byte[ ])方法的原理
byte[] bytes = new byte[2]; 文件中有ABCDE
int len;
len = fis.read(bytes); // [A, B] 2
len = fis.read(bytes); // [C, D] 2
len = fis.read(bytes); // [E, D] 1
使用字节流完成文件的复制
1.创建输入输出流对象
2.循环读写
3.释放资源
使用FileWrite写数据的5个方法
write(int ch): 一次写一个字符
write(char[] chs): 一次写一个字符数组
write(char[] chs, int offset, int len): 一次写一个字符数组的一部分
write(String s): 一次写一个字符串
write(String s, int offset, int len): 一次写一个字符串的一部分
FileWrite写数据实现换行和追加写
换行
Windows:“\r\n”
linux:\n
mac:\r
追加写
FileOutputStream fos = new FileOutputStream("路径名", true);
fos.write
Properties的load方法加载文件中的配置信息
1.创建Properties集合对象
2.调用load(流对象)
3.遍历集合
IO流的标准格式:
FileWriter fw = null;
try {
//IO流对象的创建, 操作等代码
fw = new FileWriter("d:\\09_IOAndProperties\\g.txt", true);
for (int i = 0; i <10 ; i++) {
fw.write("HelloWorld"+i+"\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 释放资源
if(fw != null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
JDK 7 增加的 "try-with-resource"
省略了 finally, 可自动释放资源
// 格式
try?(创建流对象语句,如果多个,使用';'隔开)?{
//?读写数据 ???
}?catch?(IOException?e)?{
e.printStackTrace(); ???
}
// 示例
try?(FileWriter?fw?= new?FileWriter("fw.txt");FileReader fr = new FileReader("fr.txt")) {
//?IO操作
int ch = fr.read();
fw.write(ch);
}?catch?(IOException?e)?{
e.printStackTrace();
}
JDK 9 对于"try-with-resource"的改进:
流对象的声明和创建可以放在括号外面
流对象要求是有效final的.(即不要修改流对象的值)
FileWriter fw = new FileWriter("fw.txt");
FileReader fr = new FileReader("fr.txt");
try (fw; fr) {
//?IO操作
int ch = fr.read();
fw.write(ch);
} catch (IOException e) {
e.printStackTrace();
}
day10
字节缓冲流读取数据到程序
BufferedInputStream
new BufferedInputStream(new FileInputStream("..."))
bis.read()
bis.close()
字节缓冲流写出数据到文件
BufferedOutputStream
new BufferedOutputStream(new FileOutputStream("..."))
bos.write()
bos.close()
字符缓冲流的特殊功能
readLine(): 没有换行符, 读到末尾返回null
newLine(): 根据系统自动确定换行符
转换流读取/写入指定编码的文本文件
InputStreamReader 读取
OutputStreamWriter 写入
打印流的特点
1.只有输出
2.不抛出io异常
3.接受任意类型参数,原样输出
序列化流写出对象到文件
ObjectOutputStream
类需要实现Serializable接口, 生成serialVersionUID
反序列化读取文件到程序中
ObjectInputStream
Object readObject()
|