- 什么是IO
I(Input)/O(OutPut) 数据的流动
- 流的分类
1.输入
字节输入流:InPutStream
字符输入流: reader
2.输出
字节输出流: OutPutStream
字符输出流: writer
- 文件的定位
- FIle
- 文件
文件名、后缀、内容
- 文件夹
增:
boolean mkdir() 创建此抽象路径名指定的目录。
boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
删:
delete() 删除此抽象路径名表示的文件或目录。
public static void main(String[] args) {
File file = new File("F:/xx");
delFile(file);
}
public static void delFile(File file) {
里面是否有内容 (文件夹) 测试此抽象路径名表示的文件是否是一个目录。
if (file.isDirectory()) {
//返回一个抽象路径名数组,在File类型 listFiles 数组中存起来
File[] listFiles = file.listFiles();
//看看递归了啥东西
System.out.println(Arrays.toString(listFiles));
//遍历
for (File file2 : listFiles) {
//自己调用自己 递归
delFile(file2);
}
}
//删除 删除此抽象路径名表示的文件或目录
file.delete();
}
查:
//String[] list() 获取指定目录下的所有文件或者文件夹的名称数组
System.out.println(Arrays.toString(file1.list()));
//File[] listFiles() 获取指定目录下的所有文件或者文件夹的File数组
System.out.println(Arrays.toString(file1.listFiles()));
//File[] listRoots() 获取电脑中的盘符
System.out.println(Arrays.toString(file1.listRoots()));
- 文件的过滤
定义一个类 实现FilenameFilter接口
需要自己定义过滤的规则
- 递归
注意:1.每一次方法的执行都是独立
2.方法出口
结合今天的删除案例去理解
斐波拉契 数列
public static void main(String[] args) {
System.out.println(f(6));
}
//递归
public static int f(int i) {
// i == 0 和 i == 1 是出口
if (i == 0) {
return 0;
}else if (i == 1) {
return 1;
}else{
//循环了 很多次
return f(i-1)+f(i-2);
}
}
- 字节流:不适合操作中文
- 字节输入流
创建对象
new FileInputStream();
调用方法read() 读取 返回值:到达文件末尾 -1
流资源都是需要关闭:先开的后关后开的先关
对象.close();
- 字节输出流
创建对象
new FileOutPutStream();
写入一个文件有哪些情况:
文件不存在:自动创建
路径不存在:报错
true:追加
false:覆盖
调用方法:write() 写入
关闭资源
对象.close();
- 字符流
- 字符输入流
创建对象
new FileReader();
调用方法read() 返回值:文件末尾 -1
流资源都是需要关闭:先开的后关,后开的先关
对象.close()
- 字符输出流
创建对象
new FileWriter();
写入一个文件有哪些情况:
文件不存在:自动创建
路径不存在:报错
true:追加
false:覆盖
调用方法:write()
关闭资源
对象.close()
- 转化流
使用的场景:在原来的系统上进行升级的时候
字节输入流转换为字符输入流
字节输出流转字符输出流
- 正则表达式应用
- 正则的规则
^[0-9]*$:验证数字
^[\u4e00-\u9fa5]{0,}$:验证全是汉字
- java代码中如何使用
有专门的一个类 Pattern
public boolean matches(String regex)
regex - 用来匹配此字符串的正则表达式
返回:
当且仅当此字符串匹配给定的正则表达式时,返回 true
- 使用场景
一般用于注册的信息(密码,账号格式,邮箱,手机号,身份证号等)验证
- IP地址
- 什么是IP
概念:所谓IP地址就是给每个连接在互联网上的主机分配的一个32位地址;IP是互联网上的每一台计算机都有得一个唯一表示自己的标记。
- IP分以下两个大类
IPv4:32位,分4段
IPv6:128位,分8段
- InetAddress类要来表示IP地址
常用方法:
static InetAddress getLocalHost() 返回本地主机
static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址 查找局部网内部存在的一个IP地址,如果没有知道到跑出异常
static InetAddress getByAddress(byte[] addr) 根据一个ip地址获得一个IP地址对象,没有进行查找的
boolean isReachable(int timeout)测试是否可以达到该地址 (类似ping)
- 端口
- 什么是端口
一个电脑上的应用程序都绑定了一个对应的编号(端口),通过IP可以定位到指定的主机(电脑),再加上端口就可以定位到指定的程序了。
- 总结
同一台机器上不能有两个程序使用同一个端口,会冲突。
我们开发过程中一般选用注册端口或动态端口范围内的。
以后开发中最好记住我们用到过的常用软件的端口,避免我们知己设定端口的时候和他们冲突
- URL
- 什么是URL
URL(Uniform Resource Locator)统一资源定位符,可以直接使用此类找到互联网上的资源如一个简单的网页。
一般由:协议名,资源所在主机,端口,资源名等部分组成
- URL类中的常用方法
1.构造方法:URL(String protocol, String host, int port, String file)
2.方法 : InputStream openStream() 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
3.方法 :URI toURI() 返回与此 URL 等效的 URI
4.更多方法请查看URL对应的API文档。
- URLEncoder与URLDecoder
- 使用
//正向编码
String encode = URLEncoder.encode("源代码教育","GBK");
System.out.println(encode);
//反编码
String decode = URLDecoder.decode("%D4%B4%B4%FA%C2%EB%BD%CC%D3%FD","GBK");
System.out.println(decode);
- 总结
1.区别于字节转字符的编码,之前的代码体现是 String 和 byte[]数组
2.此处是把一个String 转出了另外一种格式的String