总复习
一.文件的操作包io
1.File类:input(输入) output(输出)
(1)isFile:判断是否是文件
(2)isDirectory:判断是否是目录(文件夹)
(3)isHidden判断是否是隐藏文件
(4)exists 判断所关联的文件是否存在
(5)createNewFile 创建一个文件
(6)mkdir 创建一个文件夹
(7)getPath 获得文件的路径
getName 获得文件名
getParent 获得文件的上一次父目录的名字(父路径)
(8)length 获得文件长度,以字节为单位
(9)lastModified 获得文件的最后修改时间 返回类型为long
(10)delete 删除指定路径的文件
(11)list 获得文件夹下面所有文件的名字
listFile 获得文件夹下面的所有文件对象
(12)listRoots 获得当前系统的盘符
2.读(Input)
(1)FileInputStream:文件的读取 .read
(2)byte[] bs = new byte[(int)file.length()]; 让字节数组的长度与文件长度一致
(3)String str = new String(bs) 将字节数组转换为字符串
(4).close; 关闭流
3.写(Output)
(1)FileOutputStream:文件的写 .write
(2)byte[] bs = str.getBytes(); 将String转换为字节数组
(3)解决覆盖问题(先把内容读取出来 再连同用户输入的内容一起写进去)
注意:必须先关缓冲流,再关其它流
4.缓冲流(BufferedInputStream && BufferedOutputStream)
(1)BufferedInputStream的基本用法和FileInputStream是差不多的
但是缓冲流会减少磁盘IO的开销,它的性能高于FileInputStream和FileOutputStream
(2)序列化:将一个对象从内存当中转换到介质(存在硬盘上的介质)的过程
每一个要实现序列化的对象都必须实现一个Serializable接口
(3)反序列化:将对象从硬盘中还原到内存中 读取对象的内容二.字符流
1.
Reader类:FileReader and BufferedReader
Writer类:FileWriter and BufferdeWriter2.网络(.net)
(1)获取自己电脑:InetAddress.getLocalHost()
(2)获取局域网中别人的电脑:InetAddress.getByName("ip地址");
(3)获取互联网中的电脑:URL url = new URL(例如百度) InputStream is = url.openStream();
3.将字节流转换为字符流——利用桥梁:InputStreamReader
注意:将字节流转换为字符流的过程中,可能会发生乱码的情况,需要设置编码方式,支持中文的编码方式只有3种,分别是:gbk utf-8 gb2312Pattern:正则表达式的编译表示形式
Matcher:执行匹配操作的引擎inputStreamReader:将字节的读取流-->字符的读取流
outputStreamWriter:将字节的写入流-->字符的写入流
4.
客户端与服务器聊天总思路:
* 1.启动服务器
* 1.1等待客户端上线
* 2.客户端连接服务器
* 3.客户端给服务器发送信息
* 4.服务器接收客户端的信息
* 5.服务器回复客户端信息
* 6.客户端接收服务器信息
* 7.关闭所有连接
文件的下载总思路:
* 1.启动服务器并且等待客户端上线
* 2.客户端连接服务器
* 3.客户端告知服务器要下载的文件名
* 4.服务器接收文件名并在本地找到对应文件
* 5.服务器将该文件从硬盘读到内存中,再写入网络中
* 6.客户端从网络上下载该文件,并保存到本地
* 7.关闭连接5.多线程的运用(飞天猪、老虎机小游戏)
currentThread:当前线程
setPriority(Thread.MAX_PRIORITY);最高优先
setPriority(Thread.MIN_PRIORITY);最低优先.yield();//放弃当前CPU资源 重新开始下一次抢夺
.join();//优先该线程 让其他线程处于等待状态
.interrupt();//中断sleep线程
.suspend();//将线程挂起
.resume();//将线程恢复执行
.wait();//等待:把资源让出来
.notify();//唤醒
.notifyAll();//唤醒所有
synchronized:同步start():具备抢CPU的资格
run():抢到了就执行run//面试题:100以内的加减 工厂的生产和销售
//多人聊天室:
1、启动服务(专门开辟一个多线程用来连接)
1.1.获得当前客户端的信息
1.2.把该信息群发给我的所有客户端
2、客户之间进行 读 写
6、udp:有三种:
1、单播:是指只向一个固定的机器发送包
2、广播:是向255.255.255.255发送,所有监听某端口的机器都可以接收到
3、组播:是向一个用户组发送,该组里面所有用户可以接收到(如224.0.0.0)四个祖宗:
抽象类凡是以Stream结尾的都是字节流
凡是以Reader/Writer结尾的都是字符流输入 输出
字节流 InputStream OutputStream
字符流 Reader Writer
桥梁:字节->字符
InputStreamReaderOutputStreamWriter
int i = 1;
run方法是核心方法 灵魂
package com.zking.test;
import java.io.Serializable;
public class Demo_01 {
public static void main(String[] args) {
/**
* 高级API复习大纲
* 1.IO流(io)
* day_01 File类
* 1.1 File概述,方法(构造方法以及常用方法)
* 1.2 常用的方法
* 判断功能:isFile,isDeritory,exists,isHidden
* 新建功能:createNewFile,mkdir,mkdirs
* 删除功能:delete
* 获取功能:getPath,getName,length,lastModified...
* list,listFiles
* 1.3 算法(递归算法)
* 1.4 查找某目录下的所有文件信息
*
* day_02 IO流之字节流
* 1.1 字节流
* 输入流--InputStream--FileInputStream--BufferedInputStream
* 输出流--OutputStream--FileOutputStream--BufferedOutputStream
* 1.2 方法
* read()|write()|flush()
*
* day_03
* 1.1 序列化与反序列化----流
* 序列化:将内存上产生的对象通过序列化的方法进行保存到本地文件中‘
* 反序列化:将文本中的对象读取到内存上
* 实现这个过程:被被序列化的对象必须实现Serializable接口,否则报错
* 序列化:输出流---ObjectOutputStream
* 反序列化:输入流--ObjectInputStream
*
* 1.2 常用方法
* readObject|writeObject
*
* day_04
* 1.1 字符流
* 输入(读取)--Reader--FileReader--BufferedReader
* 输出(写入)--Writer--FileWriter--BufferedWriter
* 常用方法:read|write|newLine|readLine|flush
*
* 1.2 桥梁--中间转换流
* 输入--InputStreamReader
* 输出--OutputStreamWriter
* 以上2个流可能会考虑编码的问题
* 支持中文编码:GB2312,UTF-8,GBK
* 纯英文:ISO-8859-1
*
*
* 2.NET网络编程(net)
* 1.网络编程:就是利用NET包中的某些类来实现多台设备之间的数据传输
* 2.实现网络编程的三要素:
* IP地址|端口号|网络通讯传输协议 (ISO网络模型 TCP|IP协议)
*
* 3.TCP|IP协议
* TCP协议:打电话
* UDP协议:发邮件
*
* 4.URL编程
* 可以通过URL对象定位到网络上的资源,然后通过特定的方式进行下载。
* URL----统一资源定位符
* (1)通过URL定位资源
* (2)通过url对象调用openStream方法来实现打开或者激活网络流
* (3)边读边写的操作
*
* day_05
* 1.Pattern,Matchers find group
*
* 2.利用Socket套接字完成简单对话
* ServerSocket
* Socket
*
* day_06
* 文件下载
* swing窗体版本的聊天
*
* 3.多线程(lang)
* 1.2种实现方式:Thread Runnable
*
* 2.什么情况下使用Thread 什么情况下使用Runnable
* 多条线程实现同一件事情 使用 Runnable
* 多条线程实现不同的事情 使用Thread
*
* 3.线程的生命周期
* 5个阶段(新建,就绪,运行,阻塞,死亡)
*
* 4.常用的方法
* sleep,join,yield,wait,notify notifyAll
*
*
* UDP---
* DatagramSocket
* DatagramPacket
*
*
* Map
*
*
*
* entrySet
*/
}
}
使用正则表达式下载多图片的方法
package com.zking.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo_06 {
public static void main(String[] args) throws Exception {
// file:///D:/xb/default.html
//1.将网页的源代码读取到内存上进行打印
URL url = new URL("file:///D:/xb/default.html");
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String str = "";
while(null!=(str = br.readLine())) {
// System.out.println(str);
sb.append(str+"\n");
}
// System.out.println(sb);
// <img src="images/logo.gif" />
// <img src="images/a1.gif" width="200" height="217" />
String regex = "<img\\ssrc=\"([^\\\">]+)\"(\\swidth=\"\\w+\")?(\\sheight=\"\\w+\")?\\s/>";
Pattern compile = Pattern.compile(regex);
Matcher matcher = compile.matcher(sb);
while(matcher.find()) {
// System.out.println(matcher.group(1));
//images/logo.gif
//file:///D:/xb/images/banner.jpg
downloadImg("file:///D:/xb/"+matcher.group(1));
}
}
public static void downloadImg(String path) throws Exception {
System.out.println(path);
URL url = new URL(path);
//将图片的网络路径中的名称截取下来
int lastIndexOf = path.lastIndexOf("/");
String fileName = "";
if(-1!=lastIndexOf) {
fileName = path.substring(lastIndexOf+1);
}
InputStream is = url.openStream();
BufferedInputStream bis = new BufferedInputStream(is);
File file = new File("D:\\"+fileName);
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] buf = new byte[1024];
int len = 0;
while(-1!=(len = bis.read(buf))) {
bos.write(buf,0,len);
bos.flush();
}
}
}