高级API复习

            总复习
一.文件的操作包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 BufferdeWriter

2.网络(.net)
(1)获取自己电脑:InetAddress.getLocalHost()
(2)获取局域网中别人的电脑:InetAddress.getByName("ip地址");
(3)获取互联网中的电脑:URL url = new URL(例如百度) InputStream is = url.openStream();


3.将字节流转换为字符流——利用桥梁:InputStreamReader 
注意:将字节流转换为字符流的过程中,可能会发生乱码的情况,需要设置编码方式,支持中文的编码方式只有3种,分别是:gbk utf-8 gb2312

Pattern:正则表达式的编译表示形式
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


桥梁:字节->字符
InputStreamReader

OutputStreamWriter

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();
		}
		
		
	}
	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值