Java开发笔记

这篇具有很好参考价值的文章主要介绍了Java开发笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、参数校验

1、校验json字符串是否符合规范

  (1)业务场景:接收前端传输过来的json串,需要将其写入数据库,写入之前需要校验其是否能够转换成对应实体类,以便后续从数据库读取
  (2)方法:借助jackson中的反序列化工具,当字符串不符合json格式或出现实体类中不存在的字段时,会报错。步骤如下:
  【1】引入依赖

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.15.2</version>
        </dependency>

注意:如果你的项目已经引入了spring-boot-starter依赖,那么就不需要重复引入,spring-boot-starter已自带jackson
Java开发笔记,java,笔记,开发语言
  【2】校验代码

public class User {
    private int id;
    private String name;

    public User() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
    @Test
    public void test() {
        String json1 = "{\"id\":1,\"name\":\"张三\",\"age\":18}";
        String json2 = "acg";
        String json3 = "{\"id\":1,\"name\":\"张三\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            objectMapper.readValue(json1, User.class);
            System.out.println("json1校验成功!!");
        } catch (JsonProcessingException e) {
            System.out.println("json1校验失败!!");
        }
        try {
            objectMapper.readValue(json2, User.class);
            System.out.println("json2校验成功!!");
        } catch (JsonProcessingException e) {
            System.out.println("json2校验失败!!");
        }
        try {
            objectMapper.readValue(json3, User.class);
            System.out.println("json3校验成功!!");
        } catch (JsonProcessingException e) {
            System.out.println("json3校验失败!!");
        }
    }

  【3】运行结果
   json1多出了一个age字段,校验不通过
   json2格式错误,校验不通过
   json3格式正确且User类包含该json所有字段,校验通过
注意:实体类必须提供无参构造方法以及set方法

json1校验失败!!
json2校验失败!!
json3校验成功!!

二、文件系统学习

1、Path类:优雅灵活地使用文件

  在为项目开发一些便利工具时,时常需要对文件进行创建和读写。比如我现在需要创建一个txt文件来存储一些文本信息,在一开始,我使用了以下方法来创建。这种方法有一个缺点,需要分离文件上层目录路径和文件路径

public static void createFileTest() {
        // 文件父目录路径
        String parentDirPath = "D:/testDir/";
        // 文件名称和类型
        String filePath = "D:/testDir/1.txt";
        // 定义父目录File
        File parentFile = new File(parentDirPath);
        // 定义文件File
        File file = new File(filePath);
        // 创建目录
        if (!parentFile.exists()) {
            parentFile.mkdirs();
        }
        // 创建文件
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

 上面例子最繁琐的地方如下,重复写了文件的上层目录路径部分,写起来繁琐,看起来也不优雅:

        // 文件父目录路径
        String parentDirPath = "D:/testDir/";
        // 文件名称和类型
        String filePath = "D:/testDir/1.txt";
        // 定义父目录File
        File parentFile = new File(parentDirPath);
        // 定义文件File
        File file = new File(filePath);

 如果后续还需要再使用到文件的所在的目录路径和文件名,那么在定义上将会更加繁琐:

        // 文件父目录路径
        String parentDirPath = "D:/testDir/";
        // 文件名称
        String fileName = "1.txt";
        // 文件名称和类型
        String filePath = parentDirPath + fileName;
        // 定义父目录File
        File parentFile = new File(parentDirPath);
        // 定义文件File
        File file = new File(filePath);

 为了解决上面的问题,可以使用Java提供的另一个类:java.nio.file.Path。该类通常有以下两种获取方法:

        // 1、通过File获取
        File file = new File("D://testDir/1.txt");
        Path path1 = file.toPath();
        // 2、通过Files工具类直接从路径字符串获取
        Path path2 = Paths.get("D://testDir/1.txt");

 引入了Path类后,代码就简洁许多了,创建目录和文件可以这样写:

        File file = new File("D://testDir/1.txt");
        Path path = file.toPath();
        // 文件所在目录
        Path parentPath = path.getParent();
        // 创建目录,注意:当path相对路径会返回null,需要做下判断
        if (parentPath != null && !"".equals(parentPath.toString())) {
            Files.createDirectories(parentPath);
        }
        // 创建文件
        if (!file.exists()) {
            Files.createFile(path);
        }

 当需要获取文件所在目录和文件名称时,只需这样做:

        // 获取文件所在目录
        String parentPathStr = parentPath.toString();
        // 获取文件名称
        String fileName = path.getFileName().toString();

 还可以文件的目录层数,截取目录:

        int nameCount = path.getNameCount();
        Path subPath = path.subpath(0, nameCount - 1);

2、Files:好用的文件操作工具类

 Files是Path的好搭档,可以帮助我们通过Path方便快捷地操作文件。Files所提供的方法中,大多需要Path类型参数传入。在上面的代码中,已经有了对Files的应用:

File file = new File("D://testDir/test/1.txt");
Path path = file.toPath();
Path parentPath = path.getParent();
// 创建目录
Files.createDirectories(parentPath);
// 创建文件
Files.createFile(path);

 接下来就是关于Files的一些常用的操作文件的便捷方法介绍文章来源地址https://www.toymoban.com/news/detail-798742.html

1、复制文件

        // 定义一个文件
        File source = new File("D:/testDir/source/1.txt");
        // 获取其path
        Path sourcePath = source.toPath();
        // 获取该path的父目录
        Path parentPath = sourcePath.getParent();
        if (parentPath != null && !"".equals(parentPath.toString())) {
             Files.createDirectories(parentPath);
        }
        // 创建文件
        if (!source.exists()) {
             Files.createFile(sourcePath);
        }
        // 定义复制文件地址
        File target = new File("D:/testDir/target/2.txt");
        Path targetPath = target.toPath();
        // 获取复制文件父目录
        Path targetParentPath = targetPath.getParent();
        if (targetParentPath != null && !"".equals(targetParentPath.toString())) {
            Files.createDirectories(targetParentPath);
        }
        // 复制文件,StandardCopyOption.REPLACE_EXISTING表示当文件存在时覆盖
        Files.copy(sourcePath, target.toPath(), StandardCopyOption.REPLACE_EXISTING);
知识点
1、源文件的目录和地址必须已经存在,目标(复制)文件则目录必须已经创建
2、Files.copy() CopyOption 参数的实现类StandardCopyOption介绍:
(1)StandardCopyOption.REPLACE_EXISTING:若目标文件已创建,覆盖
(2)StandardCopyOption.COPY_ATTRIBUTES:若目标文件已创建,不进行覆盖,会抛出异常
(3)StandardCopyOption.ATOMIC_MOVE:原子地移动文件,会保证多个文件同时成功或失败。该类型不可用于Files.copy()方法,正确用法是在Files.move()中使用,该方法用于移动文件。

到了这里,关于Java开发笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(51)
  • 自考计算机科学与技术-Java语言程序设计(一)-04747-笔记

    --填空题 b和\\\'属于 转义字符 常量。 组合框 是一个下拉式菜单。 Integer是int数据类型的 包装类 。 OOP是指 面向对象的程序设计 。 Java程序文件的扩展名是 .java 。 表达式由 运算符  和  操作数  组成。 Java语言使用的字符集是 Unicode 。 StringBuffer类用于处理 可变字符串 。 A

    2024年04月27日
    浏览(47)
  • 【笔记】语言实例比较 2. 两数之和 C++ Rust Java Python

    语言实例比较 2. 两数之和 C++ Rust Java Python 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会

    2024年01月16日
    浏览(36)
  • BsinCopilot:Java版端到端大语言模型开发框架

    BsinCopilot是基于BsinPaaS开源框架构建的大语言模型应用SaaS服务,借鉴langchain的框架思想,引入  langchian4j组件,微前端微服务的架构设计,可快速助您构建和体验端到端的AI应用。 概念 说明 Bsin 毕昇缩写,毕昇,中国北宋发明家,活字印刷术的发明者。毕昇出身平民,长期在

    2024年03月13日
    浏览(57)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(61)
  • Java转Go:java开发者转学go语言,请给我一些建议和学习推荐

    在做开发时遇到最无理的需求就是部门没了😂 遇到最无理的需求就是部门没了😂,差点人也在这个公司没了,但好在是跟着大部队换了一个部门,就是要转go,也可能要用js和solidity开发 一开始知道部门没了,第一时间一定是会担心,甚至后面知道有的同事要被毕业,有的同

    2024年02月13日
    浏览(50)
  • 《Java Web轻量级整合开发入门》学习笔记

    轻量级Java Web整合开发 第一章 轻量级Java Web开发概述 1.2  java web 开发概述 1.JSP是一种编译执行的前台页面技术。对于每个JSP页面,Web服务器都会生成一个相应的Java文件,然后再编译该Java文件,生成相应的Class类型文件。在客户端访问到的JSP页面,就是相应Class文件执行的结果

    2024年02月08日
    浏览(52)
  • web开发学习笔记(8.java web后端开发基础知识)

    1.使用spring开发的优势,spring发展到今天已经形成了一种开发生态圈,提供了若干个子项目,每个项目用于完成特定的功能。使用spring全家桶,可以做到很多事情,可以很方便的套用很多的组件。 2.pom构成 指定父工程 指定web构件 指定springboot打包控件 3.启动类的写法 4.contro

    2024年01月18日
    浏览(63)
  • 开发笔记之:文件读取值溢出bug分析(JAVA版)

    (1)引言  以下是Java读取数据文件(FileInputStream)的代码:  其意图很简单:从当前游标位置读取一个双字(4字节)数据。 稍微复杂一点的就是一个字节序的考虑。 (2)问题  该代码做UT(单元测试)时,遇到了读取中断的问题(就是文件还没读取完就提前中断了)。

    2024年02月05日
    浏览(60)
  • 【Java】学习一门开发语言,从TA的Hello World开始

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月23日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包