黑马程序员技术交流社区
标题: 【石家庄校区】学习笔记_文件流_多线程_Socket [打印本页]
作者: CHNing 时间: 2018-4-23 16:33
标题: 【石家庄校区】学习笔记_文件流_多线程_Socket
本帖最后由 小石姐姐 于 2018-4-26 17:35 编辑
File类
描述文件或者文件夹的类
构造方法:
File(String filePath) 通过制定路径创建File对象
File(File parent,String child) 首先获取parent(File对象路径),然后File对象路径下添加child路径
File(String parent,String child) 把parent和child拼接后创建File对象
字段:
String File.separator 返回当前系统文件夹和文件夹之间的分隔符
Char File.separatorChar 返回系统路径文件夹分隔符char类型
String File.pathSeparator 返回系统默认名称分隔符
Char File.pathSeparatorChar
方法:
boolean renameTo(File dest) 把当前传入路径的文件名称改成指定File对象传入的名称
boolean isAbsolute() 判断绝对路径,只是字符串判断,不会检查盘符
boolean isDirectory() 判断是不是目录
boolean isFile() 判断是不是一个文件
boolean isHidden() 判断是不是一个隐藏文件
boolean exists() 判断文件或目录存在返回true,否则false
String getParent() 文件所在路径目录
File[] listFiles() 获取制定目录下的所有文件,每个文件是一个File[]元素
boolean delete() 删除文件或目录,如果删除目录保证目录下没有文件夹或文件
String getParent() 获取父路径字符串,必须和构造 File([String parent],String child)
File getParentFile() 获取父路径File对象
String getName() 获取文件或文件夹的名称
String getPath() 获取文件全路径
long lastModified() 返回文件或文件夹最后一次修改时间,返回毫秒
文件流
标准输入输出流
输入流:
InputStream System.in
输出流:
OutputStream System.out
字符转换流
OutputStreamWriter/InputStreamReader
OutputStreamWriter:
把传入的字符转换成流,写到文件中
InputStreamReader
接受字节,把字节转成字符
PrintStream打印流:
自带刷新和自动换行功能,但是必须保证已经打开这个功能并且调用println、print方法才可以
PrintStream(OutoutStream out,boolean) 输出流对象,是否启动自动换行和刷新
异常方法中有一个printStackTrace(PrintStream ps),可以利用PrintStream打印异常错误信息到日志文件中。
ObjectInputStream/ObjectOutputStream对象流
可以利用这流把对象的信息打印到文件中(序列化),保存下来。方便下一次读取
方法:
writerObject(Object obj);
readObject(Object obj)
序列化对象时必须保证对象实现了Serializable,并且尽量给对象类型添加编号
Serializable只起标识作用
Properties类
配置类,把配置信息保存到文件中
默认编码:ISO-8859-1 不能存中文,外国的编码
方法:
put(Object o1,Object o2) 添加
setProperty(Object o1,Object o2) 添加
内部调用put
两种写出到配置文件方式
void list(PrintStrem out)
void list(PrintWriter )
void load(Reader reader);
void sort(Writer writer,String comments)
注意: list位置必须在添加(setProperty())之前,因为程序走到list(xx)会直接写入
编码表
ASCII 最早的码表
GB2312 支持中文码表 GBK GB2312升级版
Unicode 所有字符都占2个字符 UTF-8 Unicode升级版
ANSI 不是码表,是表示本地码表。(系统默认码表)
多线程
线程(Thread)
创建线程的两个办法
1. 继承Thread类
重写run方法
2. 实现Rannable接口
实现run方法
笔记:
尽量使用第二种方式,因为使用第二种方式还可以继承/实现其他类或接口
构造方法:
Thread(Runnable target) 根据传入的实现Runnabl自定义类创建对象
Thread(Runnable target,String name) 传入Runnable自定义对象类后,设置线程名称为name
Thread(String name) 创建线程时设置线程名称为name
方法:
join() 等待当前线程完成后向下执行
线程池
线程池顶层接口:Executor
线程池接口:ExecutorService
配置一个线程池比较复杂,所以就有了Executors类
Executors线程池的具体实现类
静态方法:
ExecuteService newSingleThreadExecutor() 创建一个线程
ExecuteService newFixedThreadPool(int nThreads) 创建一个固定大小线程池
ExecuteService newCachedThreadPool() 创建一个可缓存线程,如果线程池大小超过处理任务所需要的线程池大小,会回收60秒内在线程池中没有执行的线程,当任务增加时,线程池也会加大。
E cuteService newScheduledThreadPool() 创建一个无限大的线程池,支持定时和周期性执行任务需求
Socket
TCP 传输控制协议
效率低,可靠
给发送端发送数据时,如果接受端接收到的信息不完整(发送端发送给目标后),发送端会自动重发数据
UDP 用户数据协议
把数据打包,效率高 ,不可靠
大小限制:最大包大小是64K
IPV4:.号隔开,全是数字
IPV6:用:隔开,16进制,大写字母+数字
端口号:
端口号范围:0~65535
端口号是进程地址
InetAddress
方法:
InetAddress[] getAllbyName(String host) 根据主机名,返回InetAddress数组(主机名有可能重名,所以是数组)
InetAddress getByName(String host) 根据主机明或用户名获取IP
String getByAddress(String host) 根据主机名获取IP
InetAddress getLocalHost() 获取当前主机InetAddress对象
String getHostName() 获取当前对象主机名
String getHostAddress() 返回IP地址字符串
DatagramSocket
用来发送和接受数据
基于UDP协议
构造:
DatagramSocket(int port) 设置端口
DatagramSocket(int port,InetAddress laddr) 设置端口,设置地址
方法:
send(DatagramPacket p) 发送数据包
receive(DatagramPacket p) 接受数据包
DatagramPacket UDP数据包模型
构造:
DatagramPakcet(byte[] bytes,int length) 数据字节数组,接受长度length包
DatagramPacket(byte[] bytes,int length,InetAddress address,int port) 数字字节数组,字节长度,地址对象,端口号
方法:
byte[] getDate() 获取数据字节
int getLength() 数据包长度
int getPort() 获取发送方端口号
异常:
java.net.BindException 端口号被绑定异常
Socket
基于TCP协议的Socket
构造方法:
Socket(InetAddress add,int port) 根据IP地址和端口
Socket(Stirng address,int port) 根据字符类型IP和端口创建
ServerSocket
TCP服务端
ServerSocket可以不管
构造方法:
ServerSocket(int port) 服务端端口号
方法:
Socket accept() 接收端,会堵塞
InputStream getInputStream() 返回标准输入流
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |