27. 【Java】包与导入:组织代码的“文件夹“

Facebook登录协议逆向实战:从加密参数到完整流程解析(附Python代码) 本文深入解析了Facebook登录协议的逆向工程实战,详细拆解了从关键加密参数(如`lgndim`、`encpass`)定位到完整登录流程的实现。文章提供了Python代码示例,重点阐述了加密逻辑的深度解析、加密函数的本地化实现,并解决了Crypto.js异步调用等常见问题,为研究Web安全和协议逆向的开发者提供了实用参考。 阅读详情

摘要: 本文深入解析Java包(Package)和导入(Import)机制,从命名冲突问题出发,详细讲解包的声明规范、物理目录结构、import语句的使用技巧,包括通配符导入和静态导入。同时介绍JDK 9引入的模块化系统(JPMS),帮助初学者理解Java代码组织的基本原理和最佳实践。通过综合示例演示包、导入和静态导入的实际应用,为构建清晰、可维护的Java项目打下坚实基础。

关键词: Java包, import语句, 模块化系统, 静态导入, 命名冲突


在前面的文章中,你可能会注意到我们写的每个 Java 文件开头几乎都有一行 package com.example.demo;。有时候我们会写 import java.util.Scanner; 来导入一个类。但你有没有想过:为什么需要这些东西?它们到底在做什么?

想象一下:你的电脑里只有一个文件夹,所有文件都堆在一起——照片、音乐、文档、程序、电影……你会疯掉的。你会按照类型、项目、日期把它们分门别类地放进不同的文件夹里,方便查找和管理。

Java 代码也是一样。当项目变大,可能包含几百甚至几千个类时,如果没有一种组织方式,所有的类都放在一起,就像把全世界的书堆在一个仓库里——你永远找不到你想要的那一本。

包(Package) 就是 Java 用来组织类的“文件夹”。而 导入(Import) 则是告诉编译器“我要从某个文件夹里找某个类”的快捷方式。

今天我们就来把包和导入的方方面面彻底讲清楚,包括它们的规范、物理结构、以及 JDK 9 引入的模块化系统。


1. 为什么需要包?—— 从“命名冲突”说起

假设你在写一个电商系统,你定义了一个 Order 类。同时,你引用了第三方库,这个库里也有一个 Order 类。如果它们都在同一个命名空间里,编译器就分不清你到底指的是哪一个了——这叫做命名冲突(Name Collision)。

包解决了这个问题。你可以把你自己写的 Order 放在 com.yourcompany.ecom.model 包里,而第三方库的 Order 可能在 org.thirdparty.orderlib 包里。当你想使用自己定义的 Order 时,写全名 com.yourcompany.ecom.model.Order,就不会有歧义了。

包的作用:

  1. 避免命名冲突:通过包名来区分同名类。
  2. 控制访问权限:default(包级私有)和 protected 的访问范围都与包有关。
  3. 逻辑组织:把功能相关的类放在同一个包里,方便维护和理解。

2. 包的声明 —— package 语句

在 Java 源文件的开头(注释之后),用 package 关键字声明该类属于哪个包。

package com.example.demo;

public class HelloWorld {
    // ...
}

规则:

  • package 语句必须是源文件中的第一条非注释语句。
  • 一个文件只能有一个 package 声明。
  • 如果省略了 package 语句,类就属于无名包(unnamed package),在开发中应该避免使用。
包命名规范
  • 全部小写:包名一律使用小写字母。
  • 域名倒置:通常用公司域名的倒序作为包前缀,因为域名是全球唯一的。比如:
    • 如果你的域名是 example.com,包名以 com.example 开头。
    • 如果你的域名是 github.io,包名以 io.github 开头。
  • 后续部分:按项目名、模块名、功能分层。例如:
    • com.example.ecom.model —— 电商项目的模型层
    • com.example.ecom.service —— 电商项目的服务层
    • com.example.ecom.util —— 电商项目的工具类

为什么用域名倒序?因为域名是唯一的,这样能保证你写的包名不会和其他公司冲突。比如 com.google 一定是 Google 的包,org.apache 一定是 Apache 的。

💡 在个人练习项目中,你完全可以随便命名,比如 demo、test,但在真实项目中,请遵守规范。


3. 包的物理目录结构

包名中的 . 对应于文件系统中的目录分隔符。例如,类 com.example.demo.HelloWorld 的 .java 文件应该位于 com/example/demo/HelloWorld.java。

在你的项目里,通常会有一个 src/main/java 或 src 目录作为源文件的根,然后在这个根下面建立包对应的文件夹。

比如一个 Maven 项目的结构:

src/
  main/
    java/
      com/
        example/
          demo/
            HelloWorld.java
            util/
              StringUtils.java

在编译时,编译器会根据包名在对应的目录下生成 .class 文件,保持相同的目录结构。


4. 导入 —— import 语句

每当你需要使用一个位于其他包中的类时,你有两种选择:

方式一:使用全限定名(Fully Qualified Name)

每次都写完整的包名 + 类名:

public class Main {
    public static void main(String[] args) {
        java.util.ArrayList<String> list = new java.util.ArrayList<>();
        java.util.Collections.sort(list);
    }
}

这样写很繁琐,尤其是同一个类用多次的时候。

方式二:使用 import 导入

在文件开头用 import 语句导入,然后就可以直接用短类名了。

import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.sort(list);
    }
}

import 语句位于 package 之后、类声明之前。

通配符导入(*)

你可以用 import java.util.*; 一次导入 java.util 包下的所有类(不包括子包)。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        HashMap<String, Integer> map = new HashMap<>();
        // 用到了多个 java.util 下的类
    }
}

通配符导入让代码看起来更简洁,但有一些争议:

  • 优点:少写几行导入语句。
  • 缺点:可能掩盖了具体用了哪些类,而且如果两个包有同名类,通配符导入可能会导致冲突。

建议:在大多数开发中,使用通配符导入是可以接受的(IDEA 默认也会折叠成 *)。但如果你特别在意依赖的透明性,可以显式导入每个用到的类。

Java 的默认导入

有两个包是默认导入的,不需要你写 import:

  • java.lang 包:包含 String、System、Math、Object 等核心类。
  • 当前包:也就是和当前类位于同一个包下的所有类。

所以你可以直接写 String 而不需要 import java.lang.String;,直接写当前包内的类也不需要导入。


5. 静态导入 —— import static

除了导入类,你还可以导入一个类中的静态成员(静态字段和静态方法),这就是 静态导入(static import)。

语法:import static 包名.类名.静态成员名; 或 import static 包名.类名.*;。

比如我们经常用 Math 类的静态方法 sqrt()、pow() 等。如果没有静态导入,我们需要写 Math.sqrt(25):

public class Main {
    public static void main(String[] args) {
        double result = Math.sqrt(25) + Math.pow(2, 3);
    }
}

使用静态导入后,可以省略 Math.:

import static java.lang.Math.sqrt;
import static java.lang.Math.pow;
// 或者 import static java.lang.Math.*;

public class Main {
    public static void main(String[] args) {
        double result = sqrt(25) + pow(2, 3);   // 直接使用,省去了 Math.
    }
}

静态导入在某些场景下确实能提高可读性,比如在写测试时经常用 assertEquals、assertTrue 等。

但不要过度使用静态导入,否则会让代码变得难以阅读——读者可能不知道 sqrt 是从哪里来的。建议只在以下情况使用:

  • 频繁使用某个工具类的静态方法(如 Math、Collections)。
  • 测试代码中(Assertions、Mockito 等框架的静态方法)。
  • 定义常量类的静态字段。

在 JDK 21 中,如果你同时导入了多个同名的静态成员,编译器会报错,需要你显式用类名区分。


6. 模块化系统(Module)—— JDK 9 起的大变革

在 Java 9 之前,所有的 Java 类都基于 classpath 来查找。不管你用不用,JDK 的全部 rt.jar(运行时类库)都会被加载。这在大型应用中会导致启动慢、占用内存多。

Java 9 引入了模块化系统(Java Platform Module System,JPMS),它让 JDK 本身可以被拆分成多个模块,也允许开发者为自己的应用定义模块。

什么是模块?

模块是一个命名的、自描述的代码和数据集合。模块可以:

  • 显式地声明它对其他模块的依赖(requires)。
  • 显式地声明它导出哪些包(exports),供其他模块使用。
  • 显式地声明它开放哪些包给反射(opens)。

模块化不仅让 JDK 可以按需加载,也促进了大型应用的依赖管理。

如何定义一个模块?

在项目的根目录下创建一个 module-info.java 文件:

// module-info.java
module com.example.demo {
    // 依赖 Java 的核心模块
    requires java.base;   // java.base 是默认的,可省略
    requires java.sql;

    // 导出包,供其他模块使用
    exports com.example.demo.api;
    exports com.example.demo.util;

    // 开放包给反射(如某些框架需要)
    opens com.example.demo.model;
}

然后你的其他模块可以依赖于它:

module com.example.client {
    requires com.example.demo;
}
模块化的好处
  1. 更快的启动时间:只加载需要的模块。
  2. 更小的运行时占用:不使用的库不会被加载。
  3. 更强的封装:即使同一个模块内的类,如果不被导出,外部也无法访问。
  4. 更好的依赖管理:显式的 requires 让依赖关系清晰可见。
对于初学者,我需要关心模块吗?

在初学阶段,你可以先忽略模块。在普通的项目中,如果不写 module-info.java,你的类会被当作“未命名模块”,运行在 classpath 模式下,和 Java 8 之前的行为完全一样。

等你开始写大型应用或库时,再深入学习模块化也不迟。但了解它的存在,能帮你理解为什么 JDK 21 的某些 API 需要 requires java.sql 这样的依赖声明。


7. 综合示例 —— 包、导入、静态导入

我们来写一个包含多个包的示例,演示包声明、导入和静态导入。

假设我们有两个包:

  • com.example.demo.model:包含 User 类。
  • com.example.demo.util:包含一个工具类 StringUtil。
// 文件: src/main/java/com/example/demo/model/User.java
package com.example.demo.model;   // 包声明

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

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }
}
// 文件: src/main/java/com/example/demo/util/StringUtil.java
package com.example.demo.util;

public class StringUtil {
    public static boolean isBlank(String s) {
        return s == null || s.trim().isEmpty();
    }

    public static String toUpper(String s) {
        return s == null ? null : s.toUpperCase();
    }
}
// 文件: src/main/java/com/example/demo/Main.java
package com.example.demo;   // 当前包

// 导入其他包的类
import com.example.demo.model.User;
import com.example.demo.util.StringUtil;

// 静态导入:导入 Math 的静态方法
import static java.lang.Math.sqrt;
import static java.lang.Math.pow;

public class Main {
    public static void main(String[] args) {
        // 使用 model 包中的 User
        User user = new User("张三", 25);
        System.out.println(user);

        // 使用 util 包中的工具方法
        String name = user.getName();
        if (!StringUtil.isBlank(name)) {
            System.out.println("姓名:" + StringUtil.toUpper(name));
        }

        // 使用静态导入的方法(不用写 Math.)
        double result = sqrt(16) + pow(2, 3);
        System.out.println("sqrt(16) + 2^3 = " + result);
    }
}

输出:

User{name='张三', age=25}
姓名:张三
sqrt(16) + 2^3 = 12.0

8. 常见陷阱与建议

  • 命名冲突:如果导入的两个包中有同名类(比如 java.util.Date 和 java.sql.Date),你可以用全限定名来明确指定。
  • 不要用 import 导入整个包时形成依赖循环:包之间应该形成清晰的层次结构,避免循环依赖。
  • IDE 自动管理导入:在 IntelliJ IDEA 等 IDE 中,你可以设置“自动导入”,它会帮你加 import 并自动去掉未使用的,非常方便。
  • 使用模块化时要小心导出:确保你导出了正确的包,否则其他模块无法使用。

9. 今天的总结

今天我们学习了 Java 组织代码的骨架:

  • 包(Package):用 package 声明,用域名倒序命名,对应物理文件夹,用于组织类和避免命名冲突。
  • 导入(Import):用 import 导入其他包的类或整个包,让代码更简洁。java.lang 和当前包自动导入。
  • 静态导入(static import):导入类的静态成员,让代码在某些场景下更简洁,但不要滥用。
  • 模块化系统(Module):JDK 9 引入,用 module-info.java 声明依赖和导出,初学阶段可暂不深入。
  • 包与访问权限:default 和 protected 的访问范围都与包密切相关。

包和导入就像是 Java 世界的“邮政编码”和“通讯录”——有了它们,你可以快速定位任何类,也能让项目结构清晰得像个图书馆。


动手试试

  1. 在你的项目中创建两个包 com.example.calculator.operations 和 com.example.calculator.utils。把加、减、乘、除运算分别放在 operations 包下的不同类中,把输入校验放在 utils 包中。然后在 Main 类中导入这些类并使用。
  2. 尝试写一个 import static java.lang.System.out;,然后直接在代码中用 out.println(...) 输出,感受静态导入的效果。
  3. 如果同时导入 java.util.Date 和 java.sql.Date,在代码中写 Date date = new Date(); 会报错。尝试用全限定名明确使用其中一个,另一个也用全限定名。
  4. (可选)研究一下你项目的 src/main/java 目录结构,看看你的包名和文件路径是否对应。尝试调整包名,并修改文件路径,直到代码能正常编译。

下一篇文章,我们将进入一个比较特别的话题——阶段性实战:学生管理系统(OOP 版)。我们会把面向对象的三大特性(封装、继承、多态)以及我们学过的其他知识,全部放到一个完整项目中。

我们下一篇见。😃

📌 获取本系列示例代码请访问 GitCode。

GN算法边介数计算优化指南:如何提升大规模社交网络分析效率 本文深入探讨了GN算法在大规模社交网络分析中的核心瓶颈——边介数计算,并提供了从算法优化到工程部署的完整性能提升方案。通过引入Brandes算法、并行计算、增量更新及分布式处理等策略,有效解决了传统GN算法在处理百万级网络时效率低下的问题,为社交网络社区划分等实际应用提供了高效解决方案。 阅读详情

相关推荐

MiniMax H3本地部署与ComfyUI集成实战:从环境配置到提示词优化

文本到视频生成是AI内容创作领域的关键技术,它基于扩散模型等深度学习原理,将自然语言描述转化为连贯的动态视觉序列。这项技术的核心价值在于大幅降低了视频制作的门槛,为短视频创作、概念可视化、教育内容生成等场景提供了高效工具。在实际工程实践中,成功部署和运行此类模型,如近期备受关注的MiniMax H3,需要精准处理环境配置、显存优化和提示词工程等环节。其中,解决“CUDA error: no kernel image is available”等版本兼容性问题,以及针对“8G显存”等有限资源进行参数调优,是确

weixin_33674976的博客 478

【已解决】Jar包已经导入,但还是爆红报错,找不到module,无法解析符号

真相只有一个,看似死路,但是实际上现在的局势很明朗了:法四(mvn install:install-file)实际上是可行的,有部分(support模块)被成功导入了,只是其他部分(By等)没有,说明是法四的路是走得通,只不过我没走全。我上面也是属于抠抠搜搜地浪费了很多时间,创造出了一个天才的对比实验法,精准定位需要的包,然后发现暴力遍历才是最快的,哈哈,没事的没事的没事的没事的没事的。因为有可能是上次下载时,因为网络原因,没有下载完毕,但是有记录,所以当你刷新,没下完的这个包不会继续下载。

ebatudou的博客 1110

无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架

Solon 是新一代,Java 企业级应用开发框架。是杭州无耳科技有限公司的“根级”开源项目(最近“杭州六小龙”很火啊,我们也是杭州的哦)。从零开始构建(No Spring、No Java-EE、No Servlet),有灵活的接口规范与开放生态。采用对商用友好的 Apache 2.0 开源协议。

向往自由的少年!(我是一个少年!!!) 1691

import java.io 包下载_免费视频教程!零基础学Python系列(27) 模块和包1

点击跟哥一起学Python关注我们实例源码本节视频涉及到的实例源码,可以在百度网盘中下载。在公众号对话框回复关键字“网盘地址”,获取网盘链接和提取码。课件01—组织你的代码通常,我们的程序不会只有一个函数,如果功能需求稍微复杂的程序,也不会都写在一个.py文件里面。这就涉及到一个问题,我们该如何组织这些.py文件呢?正如我们日常工作中将我们的文档通过文件夹分类一样,我们也通过.py文...

weixin_39633493的博客 126

VCS的增量和分离编译

vcs的增量和分离编译

yunduor909的博客 3302

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 493

Python之包导入

• run.py: 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤。除此之外,有一些方案给出了更加多的内容,比如LICENSE.txt,ChangeLog.txt文件等,主要是在项目需要开源时才会用到,请读者自行查阅。只要py文件中出现了相对导入语句(.开头的语句),那么,这个文件就不能当成执行文件了,只能被导入。"""在导入模块的时候,模块的查找始终以执行文件所在的路径为准""".. 代表的是上一级路径。

m0_57775222的博客 428

C#实战:5分钟搞定西门子S7-1200 PLC数据读写(S7netplus保姆级教程)

本文详细介绍了如何使用C#和S7netplus库快速实现与西门子S7-1200 PLC的数据读写。从环境准备、连接管理到数据读写高级技巧,提供了保姆级教程和实战方案,帮助开发者绕过常见陷阱,提升工业自动化项目的开发效率。

weixin_28432777的博客 283

下载Mysql连接java 的所需的jar包,并导入Ecplise使用

1.下载好要连接的jar包

xiaoyao_zhy的博客 4733

学习笔记--在线强化学习、离线强化学习、连续强化学习的区别(4)

在连续强化学习中,状态和动作都是连续的,这意味着智能体可以采取无限数量的动作,并且状态空间是连续的,而不是离散的点。- 策略评估和模型选择:在离线学习中,如何有效地评估不同策略和模型的性能,是一个重要的研究问题。- 连续学习和迁移学习:在线学习中,学习者需要不断在不同任务和环境中学习,研究者致力于研究如何将之前学到的知识迁移到新任务中,以实现更高效的学习和决策。- 连续动作选择和优化:在连续动作空间中,智能体对动作的选择是无限的,研究者在连续强化学习中通常关注如何有效地选择连续动作,以达到最优决策策略。

hzlalb的博客 3601

Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?

S32系列芯片中常说的IVT镜像、DCD镜像等跟Boot过程相关的镜像到底是什么,镜像结构长啥样?各镜像作用是什么?主分区和备份区的概念?答案统统在这里!!

车载系统攻城狮 4251

Java中的包与导入

包(package)   包(package)用于将完成不同功能的类分类,放在不同的目录(包)下。 包的命名   包的命名规则:将公司域名反转作为包名。   包名一般每个字母都要小写。   把类定义在某个包下面,一般在源文件开头加上package xxx.yyy;   则类的全名是xxx.yyy.类名   如果定义类的时候没有使用package指定包名,则Java认为类位于默认...

weixin_30678821的博客 129

Python爬虫实战:高效爬取中国专利数据库的完整指南

在当今信息爆炸的时代,专利数据作为技术创新的重要指标,对企业研发、市场分析和学术研究都具有极高价值。中国作为全球专利申请量最大的国家,其专利数据库包含了海量的技术创新信息。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的中国专利数据库爬虫系统。中国专利数据库主要由国家知识产权局(CNIPA)维护,包含发明专利、实用新型专利和外观设计专利三大类。截至2023年,中国专利数据库已收录超过400万件发明专利和300万件实用新型专利。

2201_76125261的博客 1570

java ldap组织架构信息定时同步AD域

java ldap 连接 AD域 同步组织架构流程及ldap接口使用详情

weixin_43164559的博客 4102

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java学习笔记27:包与内部类

1、包的作用 字节码.class分类存放 1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。 2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。 3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。 Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enum

八十岁老将的博客 224

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java 导入文件夹_java读取文件夹下的所有文件夹和文件

package com.borland.samples.welcome;import java.io.FileNotFoundException;import java.io.IOException;import java.io.File;public class ReadFile {public ReadFile() {}/*** 删除某个文件夹下的所有文件夹和文件* @param delpat...

weixin_42360783的博客 694

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java图片怎么批量导入

使用Java批量导入图片的解决方案 在现代应用开发中,处理图片是一个常见的需求。在一些情况下,我们需要批量导入多张图片,比如在图像处理、数据分析、社交应用等方面。本文将介绍如何使用Java批量导入图片,并提供一个实际的解决方案与示例代码。 问题描述 假设我们有一组图片保存在某个文件夹中,需要将这些图片导入到数据库中以供使用...

weixin_40941360的博客 323

java文件夹大小获取

Java文件夹大小获取 在日常的开发工作中,我们经常需要查看文件夹的大小,以便及时清理不必要的文件或者进行相应的处理。特别是在Java开发中,有时候需要查看某个文件夹下的所有文件的大小总和。那么,如何通过Java代码来获取文件夹的大小呢?接下来就让我们一起来了解一下。 获取文件夹大小的方法 在Java中,我们可以通过递归的...

weixin_35726374的博客 777

java 找不到文件夹

Java 找不到文件夹问题的分析与解决 在使用Java进行文件操作时,开发者们常常会遇到“找不到文件夹”的问题。这类问题一般会引发java.io.FileNotFoundException异常,这影响了程序的正常执行和用户的体验。在本文中,我们将详细分析这一问题的成因以及如何使用Java的API来解决这一痛点,并提供示例代...

weixin_41862169的博客 542

JAVA中包(package)的使用相关

包(package)   包(package)用于将完成不同功能的类分类,放在不同的目录(包)下。   包的命名   包的命名规则:将公司域名反转作为包名。   包名一般每个字母都要小写。   把类定义在某个包下面,一般在源文件开头加上package xxx.yyy;   则类的全名是xxx.yyy.类名   如果定义类的时候没有使用package指

Clear_Blue_Sky的专栏 708

java直接读取某文件夹,java读取某个文件夹下的所有文件实例代码

java读取某个文件夹下的所有文件实例代码发布于 2020-7-27|复制链接摘记: java读取某个文件夹下的所有文件学习java基础知识,读取文件,读取某个文件夹,需要读取所有文件,如何实现呢,看下实例代码。实例代码:```javaimport java.io.FileNotFoundException;..java读取某个文件夹下的所有文件学习java基础...

weixin_30082211的博客 720

关于java包的调用

导入了包而JSP的包需要复制到lib文件夹下。

u012357786的专栏 601

java创建文件夹和文件_Java创建文件夹与创建文件

jikpackage test.file;//time: 05-12-22//author: [email]huapingsmith@hotmail.com[/email]//description: 程序先检查文件夹是否存在,如果不存在,则创建一个,存在,则继续运行.//文件夹处理完成后,下一步工作为往文件夹中创建文件.//caution: 当前文件夹中如果已经有名为abc.txt的文件时,//...

weixin_33199715的博客 1562

在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPacka...

题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期...

weixin_33696106的博客 624

Java日期格式化YYYY与yyyy的区别

因为在生产中遇见了这个问题,所以记录一下 。 问题:我们程序会每天生产对应日期文件夹。比如 2020-01-01这天就就生成20200101这个文件夹,但就在2020-12-27这天程序突然生成了20211227文件夹。淦,一脸懵逼。 原因:因为文件的名称使用SimpleDateFormat这个类格式化当前日期后产生的字符串作为文件名称的,当时代码是 SimpleDateFormat format = new SimpleDateFormat(“YYYYMMdd”);平时运行没啥问题。但是,直接看代码结果

qq_40264864的博客 4474

java解压包含多个文件夹的压缩包

Java解压包含多个文件夹的压缩包 在日常开发中,我们经常会遇到需要解压包含多个文件夹的压缩包的情况。在Java中,我们可以通过使用Java标准库中的java.util.zip包来实现解压操作。本文将介绍如何使用Java来解压包含多个文件夹的压缩包,并提供代码示例。 解压步骤 解压包含多个文件夹的压缩包可以分为以下几个步骤...

weixin_40441635的博客 346
上一篇: 26. 【Java】Record:告别繁琐的 POJO
下一篇: 28. 【Java】阶段实战:学生管理系统(OOP 版)
gugucoding
博客等级 码龄140天 7粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值