JAVA85-135

news2024/12/28 5:48:24

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.coloradmin.cn/o/478902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macOS Monterey 12.6.5 (21G531) OC 0.9.1 / Cl 5151 / PE 三分区原版黑苹果镜像

苹果近期发布了 macOS Big Sur 11.7.6 和 macOS Monterey 12.6.5 更新&#xff0c;本次更新重点修复了标记为 CVE-2023-28206 的漏洞&#xff0c;在 macOS 13.3.1 更新中已修复&#xff0c;推荐大家安装升级。 镜像下载&#xff1a; macOS Monterey 12.6.5 (21G531) 三分区原版…

【面试】嵌入式C语言题目整理

【面试】嵌入式C语言题目整理 描述内存四区。 内存四区分为&#xff1a;代码区、静态区、堆区、栈区 代码区就是用来存放代码的。 静态区用来存放全局变量、静态变量、常量&#xff08;字符串常量、const修饰的全局变量&#xff09;。 堆区中的内存是由程序员自己申请和释放的&…

《高性能MySQL》读书笔记

《高性能MySQL》 第一章 MySQL架构与历史第二章 MySQL基准测试第三章 服务器性能剖析第四章 Schema与数据类型优化第五章 创建高性能的索引第六章 查询性能优化第七章 MySQL高级特性第八章 优化服务器设置第九章 操作系统与硬件优化第十章 复制第十一章 可扩展的MySQL第十二章 …

sed进阶之多行命令

shell脚本编程系列 前面使用sed编辑器的基础命令时&#xff0c;所有的命令都是针对单行数据执行操作的。在sed编辑器读取数据流时&#xff0c;它会根据换行符的位置将数据分成行。sed编辑器会根据定义好的脚本命令&#xff0c;一次处理一行数据&#xff0c;然后移到下一行重复这…

numpy稀疏矩阵拼接

今天我发现numpy中的array拼接时dense矩阵和sparse矩阵拼接使用的形式是不一样的&#xff0c;测试如下 普通矩阵拼接 import numpy as npaa np.random.randn(4,3) bb np.ones((4,3)) ccnp.c_[aa,bb] cc.shape结果如下 sparse矩阵拼接 from scipy.sparse import *row [1,1,…

DC-7通关详解

信息收集 漏洞发现 web提示我们说弱口令可能不会奏效 那么我们就先不考虑弱口令 searchsploit搜payload打打看,无果 看别人的wp知道了是通过web左下角的这个玩意去github搜 在这个仓库用户唯一的仓库中看config.php 发现账号密码 尝试后台和ssh登录 ssh登录成功 提权 当前…

一款免安装、多平台兼容的 拾色器(Color Picker)

文章目录 场景需求场景需求 Chrome Google DevTools 中的 拾色器 用法其他浏览器 场景需求 场景 我是一个前端开发人员&#xff0c;我写好的界面给老板过目。老板说有个地方颜色需要调整&#xff0c;然后发我一张图片指了指说就用这个位置这样的红色&#xff0c;我看挺合适。…

数字化时代 | 服务数字化创新和转型全景视图

本文我全面介绍一下数字化时代&#xff0c;服务将往何处去&#xff0c;将如何设计和推进数字化创新和转型。 Figure 1 服务创新和转型全景视图 如上图所示&#xff0c;在我CRM3.0理论体系中&#xff0c;服务创新和转型涉及到四个层面的内容&#xff1a; 服务定位和目标&#…

Python数据分析script必备知识(三)

Python数据分析script必备知识(三) 1.单个文件,双个文件,三个文件的读取方式 新建1.txt文件,2.txt文件,3.txt文件,效果如下 执行代码 """ 单文件,双文件,三文件的读取方式Python的读写 file.read() ———— 一次性读取整个文件内容,推荐使用re…

【信息安全案例】——系统软件安全(学习笔记)

&#x1f4d6; 前言&#xff1a;操作系统是管理系统资源、控制程序执行、提供良好人机界面和各种服务的一种系统软件&#xff0c;是连接计算机硬件与上层软件和用户之间的桥梁。因此&#xff0c;操作系统是其他系统软件、应用软件运行的基础&#xff0c;操作系统的安全性对于保…

React框架课时二认识项目的结构目录一

1react项目的目录的内容信息 ├── README.md 使用方法的文档 ├── node_modules 所有的依赖安装的目录 ├── package-lock.json 锁定安装时的包的版本号,保证团队的依赖能保证一致。 ├── package.json ├── public 静态公共目录 └── src 开发用的源代码目录 2 图…

英伟达Jetson NX,AI配置。安装SDK Components

目录 0.前言 1.准备 2.安装 3.检验 4.总结 0.前言 五一了&#xff0c;劳动节劳个动。推荐一首歌《花房姑娘》。 1.准备 接上篇博客英伟达Jetson NX套件刷机 算是完整配置英伟达这个Jetson AI。说来也是强&#xff0c;把GPU的能力用在了算力上&#xff0c;CUDA可以的。 查看…

SqlServer数据库中文乱码问题解决方法

这个问题在网上找了很多资料都没找到真正解决问题的办法&#xff0c;最终去了官网&#xff0c;终于找到问题的答案了&#xff0c;整理出来做个记录。 问题描述&#xff1a; 项目中遇到一个问题&#xff0c;sqlserver中的数据是ok的&#xff0c;结果保存到mysql中是乱码&#…

PostgreSQL数据库

0 安装 我使用的操作系统为Ubuntu。 安装命令&#xff1a; sudo apt-get update sudo apt-get install postgresql postgresql-client 进入postgres&#xff1a; sudo -i -u postgres psql 退出命令&#xff1a; \q PostgreSQL启动服务等&#xff1a; sudo /etc/init.d/postgr…

KalLinux安装burpsuite(超详细)

注意事项 1.注意linux位数 安装jdk之前先输出uname -a&#xff0c;看看kali linux是32位的还是64位&#xff0c;例如此处我的kali是32位的&#xff0c;因此需下载的是32位的jdk 2.jdk版本 jdk版本最好是oracle的&#xff0c;若使用的是openjdk很可能会出现burpsuite闪退现象…

还在因为指针的释放问题而烦恼吗?快来看下C++11智能指针shared_ptr

智能指针是这样一种类&#xff0c;即其对象的特征类似于指针。例如&#xff0c;智能指针可以存储new分配的内存地址&#xff0c;也可以被解除引用。 因为智能指针是一个类对象&#xff0c;因此它可以修改和扩充简单指针的行为。例如&#xff0c;智能指针可以建立引用技术&#…

读研读博不emo

文章目录 起因积极走出封闭的孤独经历一——去心理健康中心看看书 原因剖析解决思路 好久没更b站&#xff0c; 起因 起因是这样的&#xff0c;在自己读研的研一下学期。也遭遇到了年以来的第一次心态发生有点压抑的情况吧。其实第一学期因为我遇到了很好的导师&#xff0c;然后…

二叉搜索树(Binary Search Tree)的深入剖析:代码+画图 详解插入、查找、删除操作

BSTree 0 引言1 二叉搜索树的概念2 创建一棵二叉搜索树&#xff08;插入操作&#xff09;2.1 画图分析插入操作2.2 代码思路2.3 利用中序遍历验证 3 二叉搜索树的查找操作4 二叉树搜索树的删除操作&#xff08;重点&#xff09;4.1 代码的一些细节分析 5 总结 0 引言 本篇文章…

【Elasticsearch】集群部署

文章目录 本地集群Windiows创建 elasticsearch-cluster 文件夹&#xff0c;在内部复制三个 elasticsearch 服务修改集群文件目录中每个节点的 config/elasticsearch.yml 配置文件启动集群测试集群-查看集群状态 本地开启集群Linux软件下载软件安装创建用户修改配置文件启动软件…

链表及链表的常见操作和用js封装一个链表

最近在学数据结构和算法&#xff0c;正好将学习的东西记录下来&#xff0c;我是跟着一个b站博主学习的&#xff0c;是使用js来进行讲解的&#xff0c;待会也会在文章后面附上视频链接地址&#xff0c;大家想学习的可以去看看 本文主要讲解单向链表&#xff0c;双向链表后续也会…