JAVA85-135

news/2024/11/14 18:59:00/

JAVA85-135

  • 字符集详解
    • 解码与编码方法
  • 字符流
    • FileWriter
  • 拷贝文件夹
    • 字节缓冲流拷贝文件(一次读写一个字节)
      • 字节缓冲流拷贝文件(一次读写一个字节数组)
  • 字符缓冲流
    • 控制软件运行次数
  • 序列化流
  • 反序列化流/对象操作输入流
  • 打印流
    • 字节打印流
  • 解压缩流
  • 网络爬虫
    • 爬取名字
  • l利用糊涂包生成假数据
    • 带权重的随机数
    • 登录
    • 存档读档
    • 数据同步
  • properties

字符集详解

在这里插入图片描述
核心1:GBK中,一个英文字母一个字节,二进制第一位是0
核心2:GBK中,一个中文汉字两个字节,二进制第一位是1

解码与编码方法

Java中编码的方法
使用默认方式进行编码  public byte[] getBytes()
使用指定方式进行编码 public byte[] getBytes(String charsetName)Java中解码的方法
使用默认方式进行解码 String(byte[] bytes)
使用指定方式进行解码 String(byte[] bytes, String charsetName)

字符流

在这里插入图片描述
在这里插入图片描述
方法:close()

FileWriter

在这里插入图片描述
1创建字符输出流对象
细节1:参数是字符串表示的路径或者File对象都是可以的
细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
2写数据
细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符
3释放资源
细节:每次使用完流之后都要释放资源

在这里插入图片描述

拷贝文件夹

参数一:数据源
参数二:目的地

private static void copydir(File src, File dest) throws IOException {
dest.mkdirs();
//递归
//1.进入数据源
File[] files = src.listFiles();
//2.遍历数组
for (File file : files) {
if(file.isFile()){
//3.判断文件,拷贝
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));
byte[] bytes = new byte[1024];
int len;
while((len = fis.read(bytes))!=-1){
fos.write(bytes,0,len);
}
fos.close();
fis.close();
}else {
//4.判断文件夹,递归
copydir(file, new File(dest,file.getName()));
}
}
}

字节缓冲流拷贝文件(一次读写一个字节)

在这里插入图片描述

//1.创建缓冲流的对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(  "myiolla.txt")):
BufferedoutputStream bos = new BufferedoutputStream(new FileoutputStream(  "myio\\copy.txt"));
//2.循环读取并写到目的地
int b;
while ((b = bis.read()) != -1) {
bos.write(b);
}
//3.释放资源
bos.close();
bis.close();

字节缓冲流拷贝文件(一次读写一个字节数组)

//1.创建缓冲流的对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(  "myiolla.txt")):
BufferedoutputStream bos = new BufferedoutputStream(new FileoutputStream(  "myio\\copy.txt"));
//2.拷贝(一次读写多个字节)
byte[] bytes = new byte[1024];
int len;|
while((len = bis.read(bytes)) != -1){
bos.write(bytes, off: 9,len);
}
//3.释放资源
bos.close();
bis.close();

字符缓冲流

在这里插入图片描述

在这里插入图片描述
注:readLine方法在读取的时候,一次读一整行,遇到回车换行结束
但是他不会把回车换行读到内存当中

开启续写:

(new Filewriter( "b.txt", true)

控制软件运行次数

//1.把文件中的数字读取到内存中
//原则:
//IO:随用随创建
什么时候不用什么时候关闭
//
BufferedReader br = new BufferedReader(new FileReader(  "myio\\count.txt"));
String line = br.readLine();
br.close();
System.out.println(line);//null
int count = Integer.parseInt(line);
//表示当前软件又运行了一次
count++;//1
//2.判断
点赞成功
if(count <= 3){
System.out.println("欢迎使用本软件,第"+count+"次使用免费~")}else{
System.out.println("本软件只能免费使用3次,欢迎您注册会员后继续使用~")3
Bufferedwriter bw = new BufferedWriter(new FileWriter(  "myio\\count.txt"));
//3.把当前自增之后的count写出到文件当中
bw.write( count + ""); //97 + ""
bw.close();

转换流:

//1.JDK11以前的方案
/* InputStreamReader isr = new InputStreamReader(new FileInputStream("myio\\b.txt"),"GBK");
OutputStreamwriter osw = new OutputStreamwriter(new FileOutputStream("myio\\d.txt"),"UTF-8");
int b;
while((b = isr.read()) != -1)f
osw.write(b);
}
osw.close();
isr.close();*///2.替代方案
FileReader fr = new FileReader(fileName: "myio\\b.txt", Charset.forName("GBK"));
FileWriter fw = new FileWriter(fileName: "myio\\e.txt",Charset.forName("UTF-8"));
int b;
while ((b = fr.read()) != -1){
fw.write(b);
}
fw.close();

序列化流

在这里插入图片描述
序列化流的小细节:使用对象输出流将对象保存到文件时会出现NotSerializableException异常

解决方案:需要让Javabean类实现Serializable接口

反序列化流/对象操作输入流


在这里插入图片描述

打印流

字节打印流

在这里插入图片描述
在这里插入图片描述

解压缩流

/解压的本质:把压缩包里面的每一个文件或者文件夹读取出来,按照层级拷贝到目的地当中
1X1
//创建一个解压缩流用来读取压缩包中的数据
ZipInputStream zip = new ZipInputStream(new FileInputStream(src));
I//要先获取到压缩包里面的每一个zipentry对象
/表示当前在压缩包中获取到的文件或者文件夹
ZipEntry entry;
while((entry = zip.getNextEntry()) != null){
System.out.println(entry);
if(entry.isDirectory()){
//文件夹:需要在目的地dest处创建一个同样的文件夹
File file = new File(dest,entry.toString());
file.mkdirs();
}else{
//文件:需要读取到压缩包中的文件,并把他存放到目的地dest文件夹中(按照层级目录进行存放
FileOutputStream fos = new FileOutputStream(new File(dest,entry.toString()));
int b;
while((b = zip.read()) != -1){
/写到目的地
fos.write(b);
}
fos.close();
/表示在压缩包中的一个文件处理完毕了。
zip.closeEntry();
}
}
zip.close();

网络爬虫

/*
*作用:
从网络中爬取数据,把数据拼接成字符串返回
*
*形参:
网址
*
*返回值:
爬取到的所有数据
*
* */
public static String webCrawler(String net) throws IOException {
//1.定义StringBuilder拼接爬取到的数据
StringBuilder sb = new StringBuilder();
//2.创建一个URL对象
URL url = new URL(net);
//3.链接上这个网址
∥细节:保证网络是畅通的,而且这个网址是可以链接上的。
URLConnection conn = url.openConnection();
//4.读取数据
InputStreamReader isr = new InputStreamReader(conn.getInputStream());
int ch;
while ((ch = isr.read()) != -1){
sb.append((char)ch);
}
//5.释放资源
isr.close();
//6.把读取到的数据返回
return sb.tostring();|

爬取名字

//1.定义变量记录网址
String familyNameNet = "https://hanyu.baidu.com/shici/detail?pid=0b2f26d4cOddb3ee693fdb1137ee1bod&from=kge";
String boyNameNet = "http://www.haoming8.cn/baobao/10881.html";
String girlNameNet = "http://www.haoming8.cn/baobao/7641.html";
//2.爬取数据,把网址上所有的数据拼接成一个字符串
String familyNameStr = webCrawler(familyNameNet);
String boyNameStr = webCrawler(boyNameNet);
String girlNameStr = webCrawLer(girlNameNet);
//3.通过正则表达式,把其中符合要求的数据获取出来
ArrayList<String> familyNameTempList = getData(familyNameStr,  "(.{4})(, |。 )",  1);
ArrayList<String> boyNameTempList = getData(boyNameStr, "([\\u4E00-\\u9FA5]{2})( |。 )", 1);
ArrayList<String> girlNameTempList = getData(girlNameStr,  "(.. ){4}..",  0);
System.out.println(girlNameTempList);

l利用糊涂包生成假数据


//1.定义变量记录网址
String familyNameNet = "https://hanyu.baidu.com/shici/detail?pid=0b2f26d4cOddb3ee693fdb1137ee1bod&from=kge";
String boyNameNet = "http://www.haoming8.cn/baobao/10881.html";
String girlNameNet = "http://www.haoming8.cn/baobao/7641.html";
//2.爬取数据,把网址上所有的数据拼接成一个字符串
String familyNameStr = webCrawler(familyNameNet);
String boyNameStr = webCrawler(boyNameNet);
String girlNameStr = webCrawLer(girlNameNet);
//3.通过正则表达式,把其中符合要求的数据获取出来
ArrayList<String> familyNameTempList = getData(familyNameStr,  "(.{4})(, |。 )",  1);
ArrayList<String> boyNameTempList = getData(boyNameStr, "([\\u4E00-\\u9FA5]{2})( |。 )", 1);
ArrayList<String> girlNameTempList = getData(girlNameStr,  "(.. ){4}..",  0);
System.out.println(girlNameTempList);//4.处理数据
//familyNameTempList(姓氏)
//处理方案:把每一个姓氏拆开并添加到一个新的集合当中
ArrayList<String> familyNameList = new ArrayList<>();|
for (String str :familyNameTempList) {
//str赵钱孙李周吴郑王
蒋沈韩杨
冯陈褚卫
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
familyNameList.add(c + "");
}
}
//boyNameTempList(男生的名字)
/处理方案:去除其中的重复元素
ArrayList<String> boyNameList = new ArrayList<>();
for (String str : boyNameTempList){
if(!boyNameList.contains(str)){
boyNameList.add(str);
}
}
//girlNameTempList(女生的名字)
/处理方案:把里面的每一个元素用空格进行切割,得到每一个女生的名字
ArrayList<String> girlNameList = new ArrayList<>();for (String str : girlNameTempList) {
String[] arr = str.split("");
for (int i = 0; i < arr.length; i++) {
girlNameList.add(arr[i]);
}
}

带权重的随机数

//1.把文件中所有的学生信息读取到内存中
ArrayList<Student> list = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader();
String line;
while((line = br.readLine()) != null){
String[] arr = line.split("-");
Student stu = new Student(arr[0],arr[1],Integer.parseInt(arr[2]),Double.parseDouble(arr[3]);
list.add(stu);
}
br.close();
//2.计算权重的总和
double weight = 0;
for (Student stu : list) {
weight = weight + stu.getWeight();
}
//3.计算每一个人的实际占比
double[] arr = new doubleylist.size()];
int index = 0;
for (Student stu : list) {
arr[index] = stu.getWeight() / weight;
index++;
}
//4.计算每一个人的权重占比范围
for (int i = 1; i < arr.length; i++) {
arr[i] = arr[i] + arr[i - 1];
}
System.out.println(Arrays.tostring(arr));
//5.随机抽取
//获取一个e.0~1.0之间的随机数
double number = Math.random();
//判断number在arr中的位置
/二分查找法
//方法回返回:-插入点-1
int index2 = Arrays.binarySearch(arr, number);
System.out.println(Arrays.tostring(arr));
System.out.println(number);
System.out.println(index2);

登录


//1.读取正确的用户名和密码
BufferedReader br = new BufferedReader(new FileReader())
String line = br.readLine();//username=zhangsan&password=123
br.close();
String[] userInfo = line.split(  "&");
String[] arr1 = userInfo[e].split(  "=");
String[] arr2 = userInfo[1].split("=");
String rightUsername = arr1[1];
String rightPassword = arr2[1];
//2.用户键盘录入用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
//3.比较
if(rightUsername.equals(username) && rightPasswohsd.equals(password)){
System.out.println("登陆成功");
}else{
System.out.println("登陆失败");
}

存档读档

//直接把游戏的数据写到本地文件中
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileoutputStream( "puzzlegame\\save\\save" + index + ".data".
GameInfo gi = new GameInfo(data, x, y, path, step);
IoUtil.write0bj(oos, isCloseOut: true, gi);
} catch (IOException ioException) (
ioException.printStackTrace();
}
//修改一下存档item上的展示信息
//存档e(xx步)
item.setText("存档"+index+"("+step+"步)");
//获取当前是哪个读档被点击了,获取其中的序号
JMenuItem item = (JMenuItem) obj;
String str = item.getText();
int index = str.charAt(2) - '0';
GameInfo gi = null;
try {
/可以到本地文件中读取数据
ObjectInputstream ois = newObjectInputstream(new FileInputStream(  "puzzlegame\\save\\save" + index + ".data
gi = (GameInfo)ois.readobject();
ois.close();
} catch (IOException ioException) {
ioException.printStackTrace();
} catch (ClassNotFoundException classNotFoundException) {
classNotFoundException.printStackTrace();
3
data = gi.getData();
path = gi.getPath();
step = gi.getStep();
× = gi.getx();
y = gi.getY();
∥重新刷新界面加载游戏
initImage();

数据同步

//1.创建File对象表示所有存档所在的文件夹
File file = new File( "puzzlegame\\save");
//2.进入文件夹获取到里面所有的存档文件
File[] files = file.listFiles();
//3.遍历数组,得到每一个存档
for (File f : files) {
//f:依次表示每一个存档文件
/获取每一个存档文件中的步数
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
GameInfo gi = (GameInfo)ois.readObject();
ois.close();
//获取到了步数
int step = gi.getStep();
}∥把存档的步数同步到菜单当中
//saveO ---> 0
//save1 ---> 1
//.….
//获取存档的文件名 savee.data
String name = f.getName();
//获取当存档的序号(索引)
int index = name.charAt(4) - '0';
∥修改菜单上所表示的文字信息
saveJMenu.getItem(index).setText("存档"+index +"("+ step+")步");
loadJMenu.getItem(index).setText("存档"+index+"("+step+")步");

properties

//1.创建集合
Properties prop = new Properties();
//2.添加数据
prop.put("aaa","bbb");
prop.put("bbb","ccc");
prop.put("ddd","eee");
prop.put("fff","iii");
//3.把集合中的数据以键值对的形式写到本地文件当中
FileOutputStream fos = new FileOutputStream( name: "myiotest\\a.properties");
prop.store(fos, comments: "test");
fos.close();|
/*Bufferedwriter bw = new Bufferedwriter(new Filewriter("myiotest\\a.properties"));
Set<Map.Entry<Object, Object>> entries = prop.entrySet();
for (Map.Entry<Object,Object> entry :entries){
Object key = entry.getKey();
Object value = entry.getValue();
bw.write(key + "=" + value);
bw.newLine();
3
bw.close();*/

http://www.ppmy.cn/news/58214.html

相关文章

3A级企业信用认证作用

正如个人有信用记录一样&#xff0c;企业也有属于自己的信用记录&#xff0c;那么怎样才能向市场和同行证明企业拥有良好的信用记录、诚信守法呢? 3A认证就是可以起到这个作用。企业获得AAA企业信用等级证书不仅能够证明拥有良好的信用记录&#xff0c;而且还有诸多好处&#…

什么是链接库 | 动态库与静态库

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

自然语言处理知识抽取(pkuseg、DDParser安装及使用)

一、分词简介 1.基本概念 分词是自然语言处理中的一个重要步骤&#xff0c;它可以帮助我们将文本分成一个个词语&#xff0c;以便更好地理解和分析文本。在计算机视觉、语音识别、机器翻译等领域&#xff0c;分词都扮演着重要的角色。 目前&#xff0c;常用的分词库包括 jie…

【漏洞复现】Apache Superset 未授权访问漏洞(CVE-2023-27524)

文章目录 前言声明一、Apache Superset 简介二、影响范围三、漏洞复现四、整改建议 前言 Apache Superset 存在未授权访问漏洞&#xff0c;攻击者可利用该漏洞验证和访问未经授权的资源。 声明 本篇文章仅用于漏洞复现与技术研究&#xff0c;请勿利用文章内的相关技术从事非法…

tcpdump使用教程

一、概述 tcpdump是一个功能强大的&#xff0c;用于抓取网络数据包的命令行工具&#xff0c;与带界面的Wireshark一样&#xff0c;基于libpcap库构建。这篇文章主要介绍tcpdump的使用。关于如何使用tcpdump的资料中&#xff0c;最有用的就是tcpdump的两个手册。 tcpdump使用手…

在VM VirtualBox6.1中安装redhat7.3过程实录

最近试用皕杰报表工具&#xff0c;需要把报表部署到linux系统&#xff0c;因而在VM VirtualBox虚拟机上安装linux操作系统&#xff0c;现把过程记录下来&#xff0c;作为今后的备忘。 打开VM VirtualBox虚拟机&#xff0c;见下图&#xff1a; 点击控制菜单选择新建&#xff1…

C#基础(显示转换——>手动处理 强制转换)

括号强转 作用&#xff1a;一般情况下 将高精度的类型强制转换为低精度 语法&#xff1a;变量类型 变量名 &#xff08;变量类型&#xff09;变量; 注意&#xff1a;精度、范围 有符号整型 int i 40000;long l 1;i (int)l; 无符号整型 byte b 1; uint ui 1; b (byte)u…

( 字符串) 647. 回文子串 ——【Leetcode每日一题】

❓647. 回文子串 难度&#xff1a;中等 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使…