-
Arrays类Arrays类是Java中用来操作数组的模块他的使用方法是在Java类中使用import java.util.Arrays进行导入,并使用Arrays.方法()进行调用方法!Arrays类的fill方法fill方法有两种用途!第一种就是填充数组,将数组中的全部元素转换为所输入的元素第二种就是替换数组元素,将数组中某个元素进行单个替换用fill方法填充数组在初始化一个数组之后,如果没有给数组的元素赋值,那么这个数组中的元素默认是为0的,那么我们一个个进行赋值又会略显麻烦,会堆积代码!所以我们就需要用到fill方法进行填充,但是这么做会让全部元素变成同一个数值!import java.util.Arrays; //这里导入Arrays类public class Fill{public static void main(String[] args){int[] mylist = new int[5]; //这里创建一个名称为mylist的数组,数组的元素个个数为5Arrays.fill(mylist,3); //为数组填充3,格式为fill(列表,数值)for(int x:mylist){System.out.println(x);} //通过for each来遍历数组元素}}上面的for each在以前的文章中介绍过!用fill方法替换数组元素在给元素赋值完或者是填充完元素之后,如果想对某个元素进行修改,那么我们就要重新赋值或者是替换元素,但是重新赋值会增加代码,让代码显得更繁琐,所以Arrays类中提供了替换元素的方法fill!import java.util.Arrays;public class Fill{public static void main(String[] args){int[] mylist = {1,2,3,4};Arrays.fill(mylist, 1,2,4);for(int x:mylist){System.out.println(x);}} //这是一个特殊的格式Arrays.fill(列表名称,空格正向索引,反向索引,改变的数值)1}这里的正反向索引指向的一定要是同一个元素!Arrays类的复制数组方法在Java程序的使用过程中,有时候会需要一个含有相同或者是部分相同元素的数组,但是重新创建数组的话就会增加代码长度,减少代码可读性,那么我们就可以使用到复制数组或者是部分数组的方法!用copyOf复制数组☄️copyOf方法提供了多种重载的方法,用以复制数组,增加代码可读性。该方法不受数组长度的限制,若超出,则多处部分为0!import java.util.Arrays;public class Fill{public static void main(String[] args){int[] mylist = {1,2,3,4};int[] justlist = Arrays.copyOf(mylist,4); //将复制后的数组赋值给justlist//格式Arrays.copyOf(列表,复制后的长度)for(int x:justlist){System.out.println(x);}System.out.println(mylist);System.out.println(justlist); //这里输出两个数组的内存空间进行检查} //这是一个特殊的格式Arrays.fill(列表名称,空格正向索引,反向索引,改变的数值)1}解:从以上结果可以看出赋值成功了,并且内存空间不同(下面我会解释为什么要输出内存空间)用copyOfRange方法复制部分数组有时候在编辑代码的时候只需要中间一部分代码,但是copyOf方法只能复制以前面部分为开头的元素,而不能直接复制中间的代码,为了解决这一个问题,这个类提供了另一个方法copyOfRange方法(中文意思:选择复制)利用这个方法就可以解决这一个问题!import java.util.Arrays;public class Fill{public static void main(String[] args){int[] mylist = {1,2,3,4};int[] justlist = Arrays.copyOfRange(mylist,1,3);//Arrays类的方法使用形式Arrays.copyOfRange(列表,第一个索引位置,第二个索引位置)for(int x:justlist){System.out.println(x);}}}注:在末尾有问题解答!Arrays类对数组进行排序在代码编译过程中,有时候会需要用到有序的一组数组才能进行更好的操作,但是我们重新进行编译会增加代码数量,所以我们要对代码进行排序,Java中提供了sort方法对数组的元素进行升序排序!用sort方法进行升序排序在Java编译过程中,有顺序的数组会让你的编译更加方便,使得你自己以及其他参与编译的人更加清楚,尤其是适合那些大基数的数组更为适用和实用!import java.util.Arrays;public class Fill{public static void main(String[] args){ int[] mylist = {1,7,33,4}; Arrays.sort(mylist); //方式为Arrays.sort(列表) for(int x:mylist){ System.out.println(x); }}}问题解答为什么要在fill方法中加空格:因为不加空格就会使他执行不正确,无法达到效果为什么要输出内存空间吗:如果在同一个内存空间,一个数组改变之后另一个也会随之改变,会影响后续程序执行copyOfRange方法如果超出索引最大限度会怎么样:如果超出,则超出部分默认为0!为什么有些要方法要创建新数组有些不用:因为有些方法是对一个数组进行改变,有些是要重新创建数组!————————————————版权声明:本文为CSDN博主「Code Writers」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/m0_71905144/article/details/126250825
-
1.try-catch异常处理说明1.Java提供try和catch块来处理异常,try块用于包含可能出错的代码。catch块用于处理try块中发出的异常。可以根据需要在程序中有一个或多个try-catch块2.基本语法try{ //可疑代码 //将一场生成对应的异常对象,传递给catch块}catch{ //对异常的处理}2.try-catch异常处理细节1.如果异常发生了,则异常后面的代码不会执行,直接进入到catch块2.如果异常没有发生,则顺序执行try的代码块,不会进入到catch。3.如果希望不管是否发生异常,都执行某段代码,则使用如下代码-finally{}示例01package com.demo.trycatch;/** * @version 1.0 * @auther Demo龙 */public class TrycatchDetial { public static void main(String[] args) { //1.如果异常发生了,则异常后面的代码不会执行,直接进入到catch块 //ctrl+alt+t try { String ch="kkk"; int a=Integer.parseInt(ch); System.out.println("number"+a); } catch (NumberFormatException e) { System.out.println("异常信息:"+e.getMessage()); } System.out.println("程序继续运行"); // > 2.如果异常没有发生,则顺序执行try的代码块,不会进入到catch。 try { String ch="556"; int a=Integer.parseInt(ch); System.out.println("number="+a); } catch (NumberFormatException e) { System.out.println("异常信息:"+e.getMessage()); } System.out.println("程序继续运行02"); //> 3.如果希望不管是否发生异常,都执行某段代码,则使用如下代码-finally{} try { String ch="Demo龙"; int a=Integer.parseInt(ch); System.out.println("number="+a); } catch (NumberFormatException e) { System.out.println("异常信息:"+e.getMessage()); } finally { System.out.println("finally被执行"); } }}测试结果014.可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,如果发生异常,只会匹配一个catch。5.try-finally配合使用,这种用法相当于没有捕获异常,程序会直接退出,但会执行finally业务逻辑示例02package com.demo.trycatch;/** * @version 1.0 * @auther Demo龙 */public class TrycatchDetial02 { //4.可以有多个catch语句,捕获不同的异常(进行不同的业务处理), // 要求父类异常在后,子类异常在前,如果发生异常,只会匹配一个catch。 public static void main(String[] args) { try { Person person = new Person(); person=null; System.out.println("name="+person.getName());//空指针异常 int n1=9; int n2=0; int num=n1/n2;//数学异常 //1.try代码块可能有多个异常 //2.可以使用多个catch分别捕获不同的异常,相应处理 //3.要求子类异常写在前面,父类异常写在后面 }catch (NullPointerException e){ System.out.println("空指针异常:"+e.getMessage()); } catch (ArithmeticException c){ System.out.println("算数异常:"+c.getMessage()); } catch (Exception e) { System.out.println("异常情况:"+e.getMessage()); } finally { System.out.println("finally代码块被执行"); } System.out.println("程序继续运行。"); //5.try-finally配合使用,这种用法相当于没有捕获异常, // 程序会直接退出,但会执行finally业务逻辑 System.out.println("try-finally细节测试"); try { int m1=9; int m2=3; System.out.println("m1/m2="+m1/m2); } finally { System.out.println("执行finally代码块02"); } try { int m1=9; int m2=0; System.out.println("m1/m2="+m1/m2); } finally { System.out.println("执行finally代码块01"); } }}class Person{ private String name="demo龙"; public String getName() { return name; } public void setName(String name) { this.name = name; }}————————————————版权声明:本文为CSDN博主「Demo龙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_59708493/article/details/125011256
-
首先来了解桶排序将数组分成若干类 分这个类的条件 我们自己决定这里我们用的是 每隔5个数分为一类如20~24 25~29 30~34...数组中的元素满足这样的条件就会被放在相应的桶中如: 23会被放在20~24的桶中假设我们有这样一个数组int arr[15] = { 34,36,31,78,65,32,33,34,89,90,91,67,52,71,77};我们决定桶的数量 为确保数组中的元素都能如桶 一般设定为 :原数组中的最大值-最小值+1 想判断当前数组元素应该入哪个桶 我们这里的条件是:当前元素的值-最小值/5 为他要入的桶的下标如 最小元素20 当前元素40 那么他要进去的桶的下标为 (40-20)/5=4我们这里所谓的桶 其实就是一个哈希数组 这里用的是链式存储法 (每一个元素都是一个链表的头)如相应的桶 就是 把元素添加到哈希数组的相应下标上的链表上去 在这里我们添加用的是链表插入的方式 直接根据节点的值将节点插入到相应的位置 完成排序 之后我们只需要 遍历哈希数组并遍历哈希数组元素 吧 哈希数组中的元素都放回到原数组中去这样就实现了桶排序桶排序完整代码如下#include<iostream>using namespace std;#define jiange 5struct List{ int id; List* pNext;}; void Insert(List*&pHead,int value){ List* pTemp=new List; pTemp->id = value; pTemp->pNext = NULL; //链表中没有节点 if (pHead == NULL) { pHead = pTemp; return; } //链表中的头节点比当前节点的值大 //头插入 if (pTemp->id < pHead->id) { pTemp->pNext=pHead; pHead = pTemp; return; } //链表的头的值比当前要插入的节点的值小 //遍历链表 找到要插在谁的后面 List* pMark = pHead; while (pMark->pNext != NULL) { if (pMark->pNext->id > pTemp->id) { pTemp->pNext = pMark->pNext; pMark->pNext = pTemp; return; } pMark = pMark->pNext; } //遍历到最后一个节点 都没找到比当前节点大的节点 插在最后 pMark->pNext = pTemp; }void BuckeSort(int arr[],int nLen){ int begin = arr[0]; int end =arr[0]; //参数校验 if (arr == NULL || nLen <= 10) { return; } //找到最大值和最小值确定桶的数量 for (int i = 0; i < nLen; i++) { if (arr[i] < begin) begin = arr[i]; if (arr[i] > end) end = arr[i]; } int nBucketCount = end -begin + 1; //开辟空间 List** Hash = new List*[nBucketCount]; ::memset(Hash, 0, sizeof(List*)* nBucketCount); //遍历数组入桶 for (int i = 0; i < nLen; i++) { //入桶函数 Insert(Hash[(arr[i]-begin)/jiange], arr[i]); } //出桶 int j = 0; for (int i = 0; i < nBucketCount; i++) { while (Hash[i]) { List* pDel = Hash[i]; Hash[i] = Hash[i]->pNext; arr[j++] =pDel->id; delete pDel; pDel = NULL; } } delete Hash; Hash = NULL; } int main(){ int arr[15] = { 34,36,31,78,65,32,33,34,89,90,91,67,52,71,77}; BuckeSort(arr, 15); for (int val : arr) { cout << val << " "; } return 0;}基数排序:可以看做是桶排序的另一种优化 只不过 他的如桶条件变了 而且需要额外创建一个记录链表的尾的哈希数组; 用于添加节点尾入 头出思想:先把数组中的元素根据个位入桶出桶放入原数组在把数组中的元素根据十位入桶出桶放入原数组...直到把数组中的元素根据 数组中的最大的元素的最高位 入桶出桶放入原数组 结束这样一来 数组自己就排序好了基数排序:代码如下#include<iostream>using namespace std;#define jiange 5struct List{ int id; List* pNext;}; void AddNode(List*& pHead, List*& pEnd ,int value){ List* pTemp = new List; pTemp->id = value; pTemp->pNext = NULL; //链表中没有节点 if (pHead == NULL) { pHead = pTemp; } //链表有节点 //尾插入 else { pEnd->pNext = pTemp; } pEnd = pTemp; }void RadixSort(int arr[], int nLen){ //参数校验 if (arr == NULL || nLen <= 10) { return; } //找到最大值 int max = arr[0]; for (int i = 0; i < nLen; i++) { if (arr[i] > max) { max = arr[i]; } } int base = 1; //创建桶中链表的头节点数组 List** pHeadarr = new List * [10]; //创建桶中链表的尾节点数组 List** pEndarr = new List * [10]; ::memset(pHeadarr, 0, sizeof(List*) * 10); ::memset(pEndarr, 0, sizeof(List*) * 10); while (max / base != 0) { //arr的元素放入桶中 for (int i = 0; i < nLen; i++) { //链表尾部添加 AddNode(pHeadarr[arr[i] / base % 10], pEndarr[arr[i] / base % 10], arr[i]); } //出桶 int j = 0; for (int i = 0; i < 10; i++) { while (pHeadarr[i]) { List* pDel = pHeadarr[i]; pHeadarr[i] = pHeadarr[i]->pNext; arr[j++] = pDel->id; delete pDel; pDel = NULL; } } base *= 10; } } int main(){ int arr[15] = { 34,36,31,78,65,32,33,34,89,90,91,67,52,71,77 }; RadixSort(arr, 15); for (int val : arr) { cout << val << " "; } return 0;————————————————版权声明:本文为CSDN博主「van9527」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/van9527/article/details/126232966
-
【功能模块】使用AR502H时,前一年买的串口读取没反应,后来买的一批都可以正常读取,把老批次的系统升级了也不行。C++版本的app在两个批次都可以,JAVA的app在老批次不行。老批次与新批次的差异:老一批的系统是V200R020C00SPC100,新的一批系统是V200R020C10SPC100,都升级成了V200R020C10SPC100,还是不行双工切换的结果返回也正常,就是串口没反应【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
1:在开始本项目讲解之前和大家简单的了解了解java吧Java是由斯坦福大学网络公司于1995年开发的一门高级变成语言是一种面向互联网的编程语言 javga具有着某种魔力和吸引力同时也可以在web浏览器中运行 这些java程序被称为java小程序 applet随着java在web方向的不断发展和成熟后台开发出了:java go node.js2:Java技术体系平台分为: JavaSE(Java Standard Edition)标准版 JavaEE(Java Enterprise Edition)企业版 Java ME(Java Micro Edition)小型版3:特性包括易学 分布式 健壮 安全 开源 解释型语言等特点项目介绍:现在电商对我们生活可以说是息息相关 大家都会有把自己喜欢的东西添加到购物车的习惯那么用java算法是怎么实现的购物车添加、删除、更新等操作的呢???先给大家看看源码:Shopcar类:import mianxiangduixiang.demo.Goods;import java.util.Scanner;import java.util.SortedMap;public class ShopCarTest { public static void main(String[] args) { mianxiangduixiang.demo.Goods[] shopCar=new mianxiangduixiang.demo.Goods[1000]; while (true) { System.out.println(); System.out.println("=================================================================="); System.out.println("请您选择如下命令进行操作:"); System.out.println("添加商品到购物车 a"); System.out.println("查看购物车商品 q"); System.out.println("修改购物车商品数量 u"); System.out.println("结算购物车商品金额 p"); System.out.println("结束程序 end"); Scanner sc=new Scanner(System.in); System.out.println("请输入您的命令:"); System.out.println(); String command=sc.next(); switch (command){ case "add": //添加商品到购物车 addGoods(shopCar,sc); break; case "query": queryGoods(shopCar); break; case "update": updateGoods(shopCar,sc); break; case "pay": payGoods(shopCar); break; case "end": System.exit(0); break; default: System.out.println("无此功能!!!"); } } } public static void payGoods(Goods[] shopCar){ System.out.println("您现在购物车的信息为:"); queryGoods(shopCar); double money=0; for (int i = 0; i < shopCar.length; i++) { Goods g=shopCar[i]; if (g!=null){ money+=(g.buyNumber*g.price); }else { break; } } System.out.println("您购买商品的总金额为:"+money+"元"); } public static void updateGoods(Goods[] shopCar,Scanner sc) { System.out.println("请输入您要修改的商品id:"); int id=sc.nextInt(); Goods g=getGoodsByid(shopCar,id); if (g==null){ System.out.println("抱歉,购物车中无此商品信息,请重新输入!!!"); updateGoods(shopCar, sc); }else { System.out.println("请输入"+g.name+"要修改的数量:"); int buyNumber=sc.nextInt(); g.buyNumber=buyNumber; System.out.println("修改成功!!!"); } } public static Goods getGoodsByid(Goods[] shopCar,int id){ for (int i = 0; i < shopCar.length; i++) { Goods g=shopCar[i]; if (g != null) { if (g.id == id) { return g; } }else { //System.out.println("您还未添加此商品!!!"); return null; } } return null; } public static void queryGoods(Goods[] shopCar) { System.out.println("===========================查看商品信息========================="); System.out.println("商品编号\t\t\t商品名称\t\t\t商品价格\t\t\t商品数量"); for (int i = 0; i < shopCar.length; i++) { Goods g=shopCar[i]; if (g != null) { System.out.println(g.id+"\t\t\t\t"+g.name+"\t\t\t\t"+g.price+"\t\t\t\t"+g.buyNumber); }else { break; } } } public static void addGoods(Goods[] shopCar,Scanner sc) { //1.录入用户输入的商品信息 System.out.println("请您输入商品的编号(不可重复):"); int id=sc.nextInt(); System.out.println("请您输入商品名称:"); String name=sc.next(); System.out.println("请您输入商品价格:"); double price=sc.nextDouble(); System.out.println("请输入商品数量:"); int buyNumber=sc.nextInt(); Goods g=new Goods(); g.id=id; g.name=name; g.price=price; g.buyNumber=buyNumber; for (int i = 0; i < shopCar.length; i++) { if (shopCar[i] == null) { shopCar[i]=g; break; } } System.out.println("您的商品"+g.name+"已参加至购物车!!!"); }}Goods类:package mianxiangduixiang.demo;public class Goods { public int id; public String name; public double price; public int buyNumber;}思路:创建一个商品定义一个购物车的类定义一个商品类,用于创建后期创建商品对象定义一个购物车对象:用数组表示代表商品数组对象,可以存1000个搭建操作架构查看购物车商品修改购物车商品数量结算购物车商品金额结束程序//定义一个方法,进行求和变量累加求出金额 定义一个方法,修改购物车商品数量让用户输入要修改的商品id,根据id查询出要修改的商品对象(定义一个方法,查询要修改的对象)定义一个方法,可以查询出要修改的商品对象,返回商品对象判断此商品id是我们要找的定义一个方法,查看购物车商品信息,并展示出来定义一个方法,添加商品到购物车把这个商品购买信息封装成一个商品信息把这个商品对象添加到购物车数组中去找出这个数组空的地方存入说明此位置没有元素存入,把商品信息存入即可存入之后就跳出循环,无需继续遍历查询结果截图: 这次的项目开发其实按照一个有序的逻辑思路来开发的话是不难的 难在思维上的理解和概念的熟悉与否 相信很多小伙伴都看懂了 有问题下方留言哦
-
devkit对java源码迁移后,如何编译?
-
求助一下,断点续传上传和下载,如何中断上传或下载?
-
Oracle的EBS系统, 3.*版本的设计器无法拾取,提示如下:临时解决方案: Java 1.8版本下载链接, 然后在本地构造提示的路径即可.先测试这个版本是否可以使用. Jdk-8u202-windows-i586.exe另外还可以去oracle官网下载Java1.8版本https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html的这个版本也可以, 只是要注册并且下载速度较慢 jre-8u331-windows-i586.exe除去以上操作,还需要在1.6的java环境里添加javabridge的相关内容, 具体可参考 https://bbs.huaweicloud.com/forum/thread-166931-1-1.html
This is WeAutomate
发表于2022-08-01 14:37:15
2022-08-01 14:37:15
最后回复
This is WeAutomate
2022-10-20 12:24:26
543 1 -
这个注解的作用就是自动的给model bean实现equals方法和hashcode方法。但是,这个参数,callsuper = false 有问题吗?你在使用这个注解的时候,确定知道“为什么要重写hashcode和equals方法吗?”先看下面的测试。两个model的代码我就截图啦:父类 TV.java 和 子类 小米TV.java,使用这个注解@EqualsAndHashCode(callSuper = false) 小米tv继承tv,从继承角度讲tv有的属性,小米tv也是有的。看测试main方法 import com.lxk.model.XiaoMiTV; /** * 测试@EqualsAndHashCode注解的使用 * * @author LiXuekai on 2019/5/10 */public class EqualsAndHashCodeTest { public static void main(String[] args) { XiaoMiTV tv1 = new XiaoMiTV("123", "lxk", 1L, "白"); XiaoMiTV tv2 = new XiaoMiTV("456", "sql", 1L, "白"); System.out.println(tv1.equals(tv2)); }}来吧,大胆猜测一下,这个代码的运行结果。true还是false?猜完了,来看下运行结果图:这个因为咱在子类里面这么使用@EqualsAndHashCode(callSuper = false) ,不调用父类的属性,那么子类属性里面的相同的话,那hashcode的值就相同啦,所以代码里面的2个tv的equals方法的返回值是true那么,把@EqualsAndHashCode(callSuper = false) 的false改成true之后的结果呢?来,再猜测一下。猜完了,看运行结果(就只改@EqualsAndHashCode(callSuper = false) 里面的false改成true)这个估计就好猜了。@EqualsAndHashCode(callSuper = true),那就是用自己的属性和从父类继承的属性 来生成hashcode,比较的结果就好猜啦。那么,再把@EqualsAndHashCode(callSuper = false) 这个语句注释了呢?这个时候代码运行结果如何?来,还是再猜一下吧。猜完了,看下运行结果图竟然是true,原来他默认就是不管父类继承的属性的。看Lombok的提示:自动生成hashcode和equals方法,但是没call super,虽然这个class不是直接extends Object类,如果这是故意的,那么请加上@EqualsAndHashCode(callSuper = false) 这句话到你的model上。非常建议:去了解下为啥要重写hashcode和equals方法。要是说你觉得你造了,那再问一下,set为啥能去重复呢?刚刚那2个tv都放到一个set里面,能放进去吗?深入了解一下吧。————————————————原文链接:https://blog.csdn.net/qq_27093465/article/details/90056695
-
在我们编写代码过程中听到过很多说法如:面向切面编程,函数式编程,面向对象编程,泛式编程等等接着我来说下链式编程普通: 1:维护性强 2:对方法的返回类型无要求 3:对程序员的业务要求适中链式: 1:编程性强 2:可读性强 3:代码简洁 4:对程序员的业务能力要求高 5:不太利于代码调试 在java中StringBuilder已经实现了链式的写法 StringBuilder builder = new StringBuilder(); builder.append("blake").append("bob").append("alice").append("linese").append("eve");是不是很方便呢!怎么实现呢,其实就是在设置的返回当前的对象jdk StringBuilder的写法@Override public StringBuilder append(String str) { super.append(str); return this; }试着按这种方法一个例子如下:public class Apple { private double height; private String color; private boolean flag; public double getHeight() { return height; } public Apple setHeight(double height) { this.height = height; return this;// return 当前对象 } public String getColor() { return color; } public Apple setColor(String color) { this.color = color; return this;// return 当前对象 } public boolean isFlag() { return flag; } public Apple setFlag(boolean flag) { this.flag = flag; return this;// return 当前对象 } public Apple() { } @Override public String toString() { return "Apple{" + "height=" + height + ", color='" + color + '\'' + ", flag=" + flag + '}'; } @Override public boolean equals(Object obj) { return super.equals(obj); } public static void main(String[] args) { Apple apple = new Apple(); apple.setColor("red").setFlag(true).setHeight(22.56);//链式 System.out.println(apple); }}打印结果如下:Apple{height=22.56, color='red', flag=true}————————————————原文链接:https://blog.csdn.net/u010061287/article/details/78953591
-
1.File类的简介 File文件类主要用于文件和目录的创建、文件的查找和文件的删除等功能,File对象代表磁盘中实际存在的文件和目录,它是通过构造方法来创建一个File对象,再通过实际需要的绝对路径来创建一个新的File实例。创建好的File实例就对应实际磁盘上的真实文件,我们就可以对这个真实文件进行创建、删除、获取相关信息等操作,这些都是会真实反应到磁盘对应的文件上的,也就是我们代码中创建了文件真实磁盘上也会创建对应的文件,删除了文件也会真实的删除对应的文件。2.File文件的创建 2.1 创建File对象和实例化 首先我们创建一个File对象和他的实例,只需传好给定待操作的文件路径,再调用File的有参构造器就可以完成对象的创建和实例化操作。File file = new File("D:\demo"); 2.2 创建文件 文件可以分为文件夹(目录)及文件两种形式,这两种形式都可以是多级的,比如D:\demo\test\test.txt,如果想创建test.txt文件或者test目录,就需要他的上级目录存在。 2.2.1 如果他的上级目录或者上上级目录不存在 2.2.1.1 创建文件夹D:\demo\test 可以通过mkdir()方法或者mkdirs()方法进行创建,都不会报错,但是调用mkdir()方法如果上级或者上级以上目录不存在,不会自动创建他缺少的这些路径目录,如果缺失其中的目录他就会啥都不做,并且返回false。 如果通过mkdirs()方法进行创建,他会自动帮助创建缺失的目录,创建成功后会返回true。但是使用mkdirs()创建的路径中出现文件的话,他也将他当成目录来创建,所以mkdirs()虽然可以自动帮助创建缺失的目录,但是他只能创建目录不能创建文件。 2.2.1.2 创建文件D:\demo\test\test.txt 那么如何创建文件呢?我们可以通过createNewFile()方法进行创建一个空的文件,基本什么文件格式的文件都可以创建只不过这样创建的都是空的文件。 上面我们创建了一个test.txt的文件夹,这时候如果调用createNewFile进行文件创建的话,会什么都不做,并且返回false。如果上级或者上级以上目录缺失,则会IO异常报错,找不到指定路径。如果目录中已经存在这个文件,则会什么都不做并且返回false。2.2.2 正确的创建文件通过上面的探索,我们知道了创建文件需要注解的哪些点,那么我们就可以避免这些,第一必须上级及以上目录存在,第二必须要创建的文件在这个路径上不存在。首先我们先了解下File的路径上的相关方法public static void main(String[] args) throws IOException { // File file = new File("F:\\demo123\\test\\test.txt"); File file = new File("F:/demo123/test/test.txt"); System.out.println("file.getAbsoluteFile() :" + file.getAbsoluteFile()); System.out.println("file.getAbsolutePath() :" + file.getAbsolutePath()); System.out.println("file.getCanonicalFile() :" + file.getCanonicalFile()); System.out.println("file.getCanonicalPath() :" + file.getCanonicalPath()); System.out.println("file.getParent() :" + file.getParent()); System.out.println("file.getParentFile() :" + file.getParentFile()); System.out.println("file.getName() :" + file.getName()); System.out.println("file.getTotalSpace() :" + file.getTotalSpace()); System.out.println("file.getUsableSpace() :" + file.getUsableSpace()); System.out.println("file.getPath() :" + file.getPath()); boolean mkflag = file.createNewFile(); System.out.println(mkflag); }返回的结果是:file.getAbsoluteFile() :F:\demo123\test\test.txt file.getAbsolutePath() :F:\demo123\test\test.txt file.getCanonicalFile() :F:\demo123\test\test.txt file.getCanonicalPath() :F:\demo123\test\test.txt file.getParent() :F:\demo123\test file.getParentFile() :F:\demo123\test file.getName() :test.txt file.getTotalSpace() :271249829888 file.getUsableSpace() :254060650496 file.getPath() :F:\demo123\test\test.txt false Process finished with exit code 0接下来我们编写我们创建文件代码public static void main(String[] args) throws IOException { // File file = new File("F:\\demo123\\test\\test.txt"); File file = new File("F:/demo123/test/test.txt"); if(!file.getParentFile().exists()){ file.getParentFile().mkdirs(); } boolean mkFlag = false; if(file.exists()){ mkFlag = file.createNewFile(); System.out.println("调用创建文件方法结果是" + mkFlag); System.out.println("文件已经存在不进行创建"); }else { mkFlag = file.createNewFile(); System.out.println("调用创建文件方法结果是" + mkFlag); } if(mkFlag){ System.out.println("文件创建成功"); }else { System.out.println("文件创建失败"); } }如果创建成功返回:调用创建文件方法结果是true 文件创建成功如果创建失败返回:调用创建文件方法结果是false 文件已经存在不进行创建 文件创建失败这样我们就了解了如果创建一个文件的过程和中间要注意到的细节了。3.File类中一些常用的方法3.1 创建文件的三构造方式:File file = new File(String pathname);//文件/文件夹路径对象File file = new File(String parent, String child);//父目录绝对路径 + 子目录名称File file = new File(File parent, String child);//父目录File对象 + 子目录名称3.2 对文件的操作方法file.exists():判断文件/文件夹是否存在file.delete():删除文件/文件夹file.isDirectory():判读是否为目录file.isFile():判读是否为文件夹file.mkdir():创建文件夹(仅限一级目录)file.mkdirs():创建多及目录文件夹(包括但不限一级目录)file.createNewFile():创建文件file.getAbsolutePath():得到文件/文件夹的绝对路径file.getName():得到文件/文件夹的名字file.String():同样是得到文件/文件夹的绝对路径等于file.getAbsolutePath()file.getParent():得到父目录的绝对路径,返回值是String类型 file.getParentFile():得到父目录的绝对路径,返回值是File类型file.list():得到当前目录的子目录或者文件的名称,只是文件或者目录的名称没有前面的全路径,返回String类型的数组。注意这个方法只会查询file这个实例路径下的一级的文件或者目录,不会再往第二级进行查找。file.listFiles():得到当前目录的子目录或者文件,返回File类型的数组。注意这个方法只会查询file这个实例路径下的一级的文件或者目录,不会再往第二级进行查找。4.创建文件的一些小知识点4.1 创建文件的时候路径中的斜杠可以通过进行转义后\\的形式,也可以通过第二种/的形式。File file = new File("F:\\demo123\\test\\test.txt"); File file = new File("F:/demo123/test/test.rxt");4.2 File.separator 创建文件路径的时候这个斜杠往往挺头疼的,因为不同系统可能不会出现不识别的情况,所以出现了这个文件分隔符File.separator保证了在任何系统下不会出错。 在 Linux 中是不识别 ' \ ' 的,在 UNIX 系统上分隔符被翻译成 ' / ',而在Windows系统上分隔符被翻译成 ' \ ' ,这样就消除了这些系统的区别。以上就是File文件类的简单了解和总结。
-
【功能模块】进入hetu命令行不管输入什么都报错:Error running command: java.net.ConnectException: Failed to connect to /192.168.1.140:29884但是这个ip不是hetu的节点,不知道为什么会去连这个ip【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
后端函数脚本是否只能使用系统提供的类和方法?能否使用没有在列表的Java类或在方法,比如java.util.*? 能否调用 io 或者System 相关的包?
-
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();env.enableCheckpointing(1000);env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);env.setParallelism(Integer.valueOf(prop.getProperty("setParallelism")));TableEnvironment tEnv = StreamTableEnvironment.create(env);tEnv.executeSql("CREATE TABLE kafka(\n" +"uuid VARCHAR(20),\n" +"name VARCHAR(10),\n" +"age INT,\n" +"ts TIMESTAMP(3),\n" +"`p` VARCHAR(20)\n" +") WITH (\n" +"'connector' = 'kafka',\n" +"'topic' = 'writehudi',\n" +"'properties.bootstrap.servers' = 'x.x.x.x:21005',\n" +"'properties.group.id' = 'testGroup1',\n" +"'scan.startup.mode' = 'latest-offset',\n" +"'format' = 'json'\n" +")");tEnv.executeSql("CREATE TABLE stream_mor(\n" +"uuid VARCHAR(20),\n" +"name VARCHAR(10),\n" +"age INT,\n" +"ts timestamp(3),\n" +"`p` VARCHAR(20)\n" +") PARTITIONED BY (`p`) WITH (\n" +"'connector' = 'hudi',\n" +"'path' = 'hdfs://hacluster/tmp/hudi/stream_mor',\n" +"'table.type' = 'MERGE_ON_READ',\n" +"'compaction.delta_commits' = '1'\n" +")");tEnv.executeSql("INSERT INTO stream_mor select * from kafka");env.execute("FlinkSQLJob");附件为完整工程样例,具体执行步骤请参考https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=86598
-
【功能模块】java性能【操作步骤&问题现象】1、安装毕昇jdk1.8 2、安装maven3.8.63、本地启动jar包4、登陆鲲鹏性能分析页面5、点击java性能分析6、点击采样分析【截图信息】【日志信息】(可选,上传日志内容或者附件)
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签