vs做的网站怎么放到iis中,用自己的电脑建网站,国内域名注册商排行榜,绵阳欣诚建设Java基础知识#xff08;11#xff09;
#xff08;包括#xff1a;IO流高级流#xff0c;网络爬虫基础#xff0c;Commons-i0工具包和Hutool工具包#xff09;
目录
Java基础知识#xff08;11#xff09;
一.IO流高级流
1.缓冲流
【1】字节缓冲流
#xff0…Java基础知识11
包括IO流高级流网络爬虫基础Commons-i0工具包和Hutool工具包
目录
Java基础知识11
一.IO流高级流
1.缓冲流
【1】字节缓冲流
1基础知识
2方法
[2] 字符缓冲流其实基本流里已经有缓冲区了速度提升不大
1构造方法
2字符缓冲流特有方法
2.转换流
【1】转换流是字符流和字节流之间的桥梁
【2】作用
1作用1:
2作用2:
3.序列化流/对象操作输出流
1可以把Java中的对象写到本地文件中
2构造方法
3成员方法
4案例
5序列化流的小细节
4. 反序列化流 /对象操作输入流
1可以把序列化到本地文件中的对象读取到程序中来
2构造方法
3成员方法
4序列化流/反序列化流的细节汇总
5. 打印流
【1】分类:打印流一般是指:PrintStreamPrintWriter两个类
【2】字节打印流字节流底层没有缓冲区开不开自动刷新都一样
1构造方法
2成员方法
【3】字符打印流字符流底层有缓冲区想要自动刷新需要开启
1构造方法
2成员方法
6. 解压缩流
1解压本质:把每一个ZipEntry按照层级拷贝到本地另一个文件夹中
2例子
7. 压缩流
1压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中
2例子
8. Commons-i0
9. Hutool工具包
10.网络爬虫
1前置知识案例
2网络爬虫案例
1
2
3Hutool中有类似的方法,上面仅供理解!!!! 一.IO流高级流
1.缓冲流
【1】字节缓冲流
1基础知识
BufferedinputStream 字节缓冲输入流
BufferedOutputStream字节缓冲输出流
原理:底层自带了长度为8192的缓冲区提高性能
2方法
1public BufferedInputStream(InputStream is)把基本流包装成高级流提高读取数据的性能
2public BufferedOutputStream(0utputStream os) 把基本流包装成高级流提高写出数据的性能
3案例
BufferedInputStream bis new BufferedInputStream(new FileInputstream( name: myio\\a.txt));
BufferedoutputStream bos new BufferedoutputStream(new File0utputstream( name: myio\\copy.txt));
[2] 字符缓冲流其实基本流里已经有缓冲区了速度提升不大
1构造方法
public BufferedReader(Reader r) 把基本流变成高级流
public Bufferedwriter(Writer r) 把基本流变成高级流
2字符缓冲流特有方法
字符缓冲输入流特有方法
public string readLine() 读取一行数据如果没有数据可读了会返回null
字符缓冲输出流特有方法
public void newLine() 跨平台的换行
2.转换流
【1】转换流是字符流和字节流之间的桥梁
【2】作用
1作用1:
1指定字符集读写
2案例
//创建对象并指定字符编码
InputStreamReader isr new InputStreamReader(new FileInputStream(mvio\lgbkfile.txt)“GBK”)
在JDK11有更好的方法FileReader frnew FileReader(myio\\gbkfile,txt,charset.forName(GBK));
2作用2:
1字节流想要使用字符流中的方法
2案例
FileInputStream fis new FileInputStream( name: myio\la.txt);
InputStreamReader isrnew InputStreamReader(fis);
BufferedReader br new BufferedReader(isr);
string str br.readLine();
即BufferedReader br new BufferedReader(new InputstreamReader(new fileInputstream( name: myio\\a.txt)));
3.序列化流/对象操作输出流
1可以把Java中的对象写到本地文件中
2构造方法
public ObjectOutputStream(0utputStream out) 把基本流包装成高级流
3成员方法
public final void write0bject(object obj)把对象序列化(写出)到文件中去
Student stu new student( name:zhangsan,age: 23);
4案例
ObjectOutputstream oos new objectoutputstream(new File0utputstream( name: myio\la.txt))
oos.writeobject(stu);
5序列化流的小细节
使用对象输出流将对象保存到文件时会出现NotserializableException异常
解决方案:需要让Javabean类实现Serializable接口标记性接口
4. 反序列化流 /对象操作输入流
1可以把序列化到本地文件中的对象读取到程序中来
2构造方法
public objectInputstream(Inputstream out) 把基本流变成高级流
3成员方法
public object readobject()把序列化到本地文件中的对象读取到程序中来需要进行强转
4序列化流/反序列化流的细节汇总
① 使用序列化流将对象写到文件时需要让Javabean类实现Serializable接口否则会出现NotSerializableException异常
② 序列化流写到文件中的数据是不能修改的一旦修改就无法再次读回来了
③ 序列化对象后修改了Javabean类再次反序列化会不会有问题?
会出问题会抛出InvalidclassException异常
解决方案:给lavabean类添加serialVersionUID(列号、版本号)
private static final long serialVersionUID -6357601841666449654L;
可用idea自动生成。
④如果一个对象中的某个成员变量的值不想被序列化又该如何实现呢?
解决方案:给该成员变量加transient关键字修饰该关键字标记的成员变量不参与序列化过程
⑤如果需要将多个对象进行序列化一般规定将其放入一个集合中序列化集合
5. 打印流
【1】分类:打印流一般是指:PrintStreamPrintWriter两个类
特点1:打印流只操作文件目的地不操作数据源
特点2:特有的写出方法可以实现数据原样写出
例如:打印:97 文件中:97
特点3:特有的写出方法可以实现自动刷新自动换行
打印一次数据写出换行刷新
【2】字节打印流字节流底层没有缓冲区开不开自动刷新都一样
1构造方法
public Printstream0utputStream/File/string) 关联字节输出流/文件/文件路径重要
public PrintStream(String fileName,Charset charset) 指定字符编码重要
public PrintStream(OutputStream out,boolean autoFlush) 自动刷新
public PrintStream(0utputStream out,boolean autoFlush, String encoding) 指定字符编码且自动刷新
2成员方法
public void write(int b) 常规方法:规则跟之前一样将指定的字节写出
public void println(Xxx xx) 特有方法:打印任意数据自动刷新自动换行
public void print(Xxx xx) 特有方法:打印任意数据不换行
public void printf(String format,Object... args)特有方法:带有占位符的打印语句不换行
【3】字符打印流字符流底层有缓冲区想要自动刷新需要开启
1构造方法
public PrintWriter(Write/File/String) 关联字节输出流/文件/文件路径
public PrintWriter(String fileName, charset charset) 指定字符编码
public PrintWriter(Write wboolean autoFlush) 自动刷新
public PrintWriter(0utputStream out, boolean autoFlush, charset charset) 指定字符编码且自动刷新
2成员方法
public void write(int b) 常规方法:规则跟之前一样写出字节或者字符串
public void println(Xxx xx) 特有方法:打印任意数据自动刷新自动换行
public void print(Xxx xx) 特有方法:打印任意数据不换行
public void printf(String format,Object... args)特有方法:带有占位符的打印语句不换行
6. 解压缩流
1解压本质:把每一个ZipEntry按照层级拷贝到本地另一个文件夹中
2例子
//创建一个解压缩流用来读取压缩包中的数据
ZipInputstream zip new ZipInputstream(new FileInputstream(src));
//要先获取到压缩包里面的每一个zipentry对象
//表示当前在压缩包中获取到的文件或者文件夹
ZipEntry entry;
while((entry zip.getNextEntry())! nu11){
System.out.println(entry);
}
7. 压缩流
1压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中
2例子
public static void tozip(File src,File dest)throws IoException {
//1.创建压缩流关联压缩包
Zipoutputstream zos new zipoutputstream(new File0utputstream(new File(dest, child: a.zip)));
//2.创建zipEntry对象表示压缩包里面的每一个文件和文件夹
ZipEntry entry new zipEntry( name:a.txt);
//3.把ZipEntry对象放到压缩包当中
zos.putNextEntry(entry);
//4.把src文件中的数据写到压缩包当中
FileInputstream fis new FileInputstream(src);
int b;
while((bfis.read())!-1){
zos.write(b);
zos.closeEntry();
zos.close();
}
8. Commons-i0
1简介
Commons-io是apache开源基金组织提供的一组有关I0操作的开源工具包。
作用:提高I0流的开发效率
2Commons-io使用步骤
1在项目中创建一个文件夹:lib
2将jar包复制粘贴到lib文件夹
3右键点击jar包选择 Add as Library -点击OK
4在类中导包使用
5文档在仅我可见中。
9. Hutool工具包
官网 https://hutool.cn/ API文档 https://apidoc.gitee.com/dromara/hutool/
中文使用文档 https://hutool.cn/docs/#/
10.网络爬虫
1前置知识案例
//Pattern:表示正则表达式
//Matcher:文本匹配器作用按照正则表达式的规则去读取字符串从头开始读取在大串中去找符合匹配规则的子串。
//获取正则表达式的对象
Pattern pPattern.compile(Java\\d{0,2});
//获取文本匹配器的对象
//m:文本匹配器的对象
//str:大串
//p:规则
//m:要在str中找符合p规则的小串
Matcher mp.matcher(str);
//拿着文本匹配器从头开始读取寻找是否有满足规则的子串
//如果没有方法返回false
//如果有返回true。在底层记录子串的起始索引和结束索引1
//如0,4
boolean bm.find();
//方法底层会根据find方法记录的索引进行字符串的截取
//substring(起始索引结束索引);包头不包尾
//(0,4)但是不包含4索引
//会把截取的小串进行返回。
string s1 m.group();
System.out.println(s1);
//第二次在调用find的时候会继续读取后面的内容
//读取到第二个满足要求的子串方法会继续返回true
//并把第二个子串的起始索引和结束索引1进行记录
b m.find();
//第二次调用group方法的时候会根据find方法记录的索引再次截取子串
string s2 m.group();
System.out.println(s2);
}
2网络爬虫案例
1
public static string webcrawler(string net)throws Ioxception {
//1.定义stringBuilder拼接爬取到的数据
StringBuilder sbnew stringBuilder();
//2.创建一个URL对象
URL url new URL(net);
//3.链接上这个网址
//细节:保证网络是畅通的而且这个网址是可以链接上的。
URLConnection conn url.openconnection();
//4.读取数据
InputstreamReader isr new InputStreamReader(conn.getInputstream());
int ch;
while((chisr.read())!-1){
sb.append((char)ch);
//5.释放资源
isr.close();
//6.把读取到的数据返回
return sb.tostring();
}
2
//通过正则表达式把其中符合要求的数据获取出来
private static Arrayliststring getData(string str, string regex){
//1.创建集合存放数据
ArrayListstringlist new ArrayList();
//2.按照正则表达式的规则去获取数据
Pattern pattern Pattern.compile(regex);
//3.按照pattern的规则到str当中获取数据
Matcher matcher pattern.matcher(str);
while(matcher.find()){
list.add(matcher.group(index));
}
return list
}
3Hutool中有类似的方法,上面仅供理解!!!!