//1.File相关
//1.1 FileFilter
//FileFilter:文件过滤器
//listFiles方法用于将当前层的文件和目录的File对象放入数组
//FileFilter则是在放入过程中的过滤
//案例:在指定的a目录下,查找当前层txt为后缀的文件
//分析:1.后缀为txt;2.是文件
//具体操作:实例化a目录的对象;取出下面的文件和目录;再进行判断
public class Test1 {
public static void main(String[] args) {
File file = new File("a");
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//如果为true,则放行;false就拦截
return pathname.isFile()&&pathname.getName().endsWith(".txt");
}
});
System.out.println(Arrays.toString(files));
}
}
//1.2.Properties集合
//Properties:Map的子类,用于存储键值对
//存储键值对都是字符串类型
//与IO流有关,可以将文件的内容加载的Properties;也可以将Properties内容存储到文件
public class Test2 {
public static void main(String[] args) throws FileNotFoundException, IOException {
Properties properties = new Properties();
properties.put("aaa", "12344");
properties.put("bbb", "65555");
properties.put("ccc", "76666");
//存储
properties.store(new FileOutputStream("a.txt"), "store");
Properties p = new Properties();
//加载文件的键值对
p.load(new FileInputStream("a.txt"));
//p.getProperty(key):根据key,获取value,都是字符串类型
System.out.println(p);
}
}
/*
2. 计算机网络
2.1 概述
什么是网络:由点(计算机)和线(网线)构造的网状结构
什么是计算机网络:不同区域的计算机,通过线路连接能够实现数据传递与资源共享的方式
什么是网络编程:实现数据传递与资源共享的具体技术
2.2 网络模型
概述:在实现通讯过程中的软硬件结合的操作
*/
//2.3 网络编程三要素(重点)
/*
IP地址:
计算机的唯一标识
有两种IP地址表示:
IPV4:分4个段,每个段最高为255;例如:192.168.1.6
IPV6:分8个段,每个段最高位FFFF;(十六进制)
IPV4分类:
A类:从1开始~126段
B类:127开始~191段
C类:192开始~223段(10个以内)
D类:224开始~239段
回环地址:127.0.0.1,代表本机测试地址
Port:
通讯软件的唯一识别:(0~65535)
0~1024: 系统已经分配或保留的端口,一般不去使用
1024以后可以使用
避开一些常用端口:例如3306,8080,1521等
协议:
TCP,UDP协议
TCP:面向连接的协议,安全但效率低--例如:打电话
UDP:无连接的协议,不安全但效率高--例如:发短信
*/
//3. 网络编程
//3.1 INetAddress类(了解)
//INetAddress类: 代表IP地址对象的类
//可以调用相关方法得到IP地址
public class Test1 {
public static void main(String[] args) throws UnknownHostException {
//通过ip或主机名或域名得到ip对象
InetAddress net1 = InetAddress.getByName("192.168.1.8");
System.out.println(net1);
//一个域名可能绑定多台服务器(多个IP)
InetAddress[] nets = InetAddress.getAllByName("www.baidu.com");
System.out.println(Arrays.toString(nets));
InetAddress net2 = InetAddress.getLocalHost();
System.out.println(net2); //获取本机IP
}
}
//3.2 TCP-客户端发数据到服务器(重点)
//TCP编程:也叫做Socket编程,基于tcp协议的字节流的传输协议
//通讯模型: 客户端-服务器模型
//服务器:
//1.实例化服务器Socket对象,指定自身端口
//2.监听客户端的连接,如果有客户端连接了,那么创建一个socket与客户端通讯
//客户端:
//1.实例化socket对象,传入服务器的ip和端口
//谁先启动? 服务器先启动,有监听阻塞方法
//案例:服务器与客户端建立TCP连接后,进行通讯;客户端给服务器发数据
//-----Server-------
//TCP编程:也叫做Socket编程,基于tcp协议的字节流的传输协议
//通讯模型: 客户端-服务器模型
//服务器:
//1.实例化服务器Socket对象,指定自身端口
//2.监听客户端的连接,如果有客户端连接了,那么创建一个socket与客户端通讯
//客户端:
//1.实例化socket对象,传入服务器的ip和端口
//谁先启动? 服务器先启动,有监听阻塞方法
//案例:服务器与客户端建立TCP连接后,进行通讯;
//客户端给服务器发数据,服务器也可以给客户端发数据
public class Server {
public static void main(String[] args) throws IOException {
//实例化服务器socket,指定自身端口
ServerSocket serverSocket = new ServerSocket(9527);
//调用accept监听客户端连接,如果有客户端连接了,则创建了socket对象与客户端通讯
Socket socket = serverSocket.accept(); //阻塞方法
System.out.println("有一个客户端连上来了");
//接收数据--读
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
System.out.println(new String(b, 0,len));
//服务器发送数据--写
OutputStream os = socket.getOutputStream();
os.write("服务器回应给客户端的数据".getBytes());
IOUtils.closeAll(is,os,socket,serverSocket);
}
}
//-----Client-------
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1", 9527);
//通过字节流发数据--写
OutputStream os = socket.getOutputStream();
os.write("客户端发送的数据..".getBytes());
//客户端的接收--读
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
System.out.println(new String(b, 0,len));
//统一资源关闭: 先关小的,再关大的
IOUtils.closeAll(os,is,socket);
}
}
//3.3 客户端上传图片到服务器
//案例:使用tcp编程实现图片上传到服务器
//分析:先在客户端通过输入字节流读取图片资源,然后写到socket中
//在服务器的socket中通过读字节流接收,然后再写到服务器本地
//-------Server--------
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10086);
Socket socket = ss.accept();
//从socket中读取字节流
InputStream is = socket.getInputStream();
FileOutputStream fos = new FileOutputStream("d:\\a.jpg");
byte[] b = new byte[1024];
int len;
while((len=is.read(b))!=-1) {
fos.write(b, 0, len);
}
System.out.println("服务器接收成功~!");
IOUtils.closeAll(fos,is,socket,ss);
}
}
//-------Client--------
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1", 10086);
//客户端从图片中读取资源
FileInputStream fis = new FileInputStream("b.jpg");
byte[] b = new byte[1024];
int len;
OutputStream os = socket.getOutputStream();
while((len=fis.read(b))!=-1) {
os.write(b, 0, len);
}
System.out.println("上传到服务器~~");
IOUtils.closeAll(os,fis,socket);
}
}
//3.4 多个客户端发数据给服务器
//案例:多个客户端与服务器聊天
//服务器:
//1.来一个客户端,那么产生一个socket与客户端通讯---多线程
//2.从socket总接收文本内容,通过字符缓冲流封装
//客户端:
//1.循环从客户端录入数据
//------服务器------
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10010);
//死循环实时监听客户端连接
while(true) {
Socket socket = ss.accept();
System.out.println("有一个客户端进行了连接...");
new ServerThread(socket).start();//在开辟的路径中,执行socket操作
}
}
}
//------服务器线程------
public class ServerThread extends Thread {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
InputStream is = null;
BufferedReader br = null;
try {
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
while(true) {
String msg = br.readLine();
System.out.println(msg);
if(msg.equals("886")) {
break;
}
}
} catch (IOException e) {
System.out.println("有异常中断。。。");
}finally {
System.out.println("有一个客户端退出了连接");
IOUtils.closeAll(is,br,socket);
}
}
}
//------客户端------
public class Clent {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1", 10010);
System.out.println("请从客户端进行录入:");
OutputStream os = socket.getOutputStream(); //字符缓冲流包装
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
//从键盘录入
Scanner sc = new Scanner(System.in);
while(true) {
String msg = sc.next();
bw.write(msg);
bw.newLine(); //换行
bw.flush(); //刷新
if(msg.equals("886")) { //约定
break;
}
}
IOUtils.closeAll(os,bw,socket);
}
}