
在IDEA中包Package是用于逻辑分类的文件夹类Class是具体代码文件。新建包用于组织相关功能如bean放实体类source放数据源而类必须放在包内。Access类独立建包是为了遵循分层架构实现职责分离便于复用与维护。包名采用“域名倒写”规范如com.pk.flink.bean可避免类名冲突确保全局唯一。开启“AlwaysSelectOpenedFile”后打开文件时左侧目录会自动展开并高亮定位提升开发效率。idea中分不清什么时候该新建类什么时候需要新建包还有包名为什么要那么多层级。Flink自定义单并行度数据源用到一个自定义类Access这个类为什么要新建一个包我还以为单独建一个类就行。package com.pk.flink.source; import com.pk.flink.bean.Access; import org.apache.flink.streaming.api.functions.source.SourceFunction; import java.util.Random; //自定义数据源 public class AccessSource implements SourceFunctionAccess { boolean isRunning true; Override public void run(SourceContextAccess ctx) throws Exception { //产生数据 Random random new Random(); String[] domains {pk1.com,pk2.com,pk3.com}; //循环产生数据 while (isRunning) { long time System.currentTimeMillis(); //向外发数据 ctx.collect(new Access(time,domains[random.nextInt(domains.length)],random.nextInt(1000)1000)); //减速 Thread.sleep(200); } } Override public void cancel() { isRunning false; } }这绝对是前端转 Java尤其是刚开始用 IDEA最经典的困惑之一。在你眼里建个.js或.vue文件直接放在文件夹里就行了怎么到了 Java 里非得搞出这么多层级和“包”我们用前端思维来给你彻底理清这两个概念 包Package vs 类Class包Package文件夹Directory。它纯粹是为了做逻辑分类解决文件太多找不着的问题。类Class前端的一个具体的代码文件如index.js或Button.vue。里面写着真正的业务逻辑。在 Java 里有一个铁律你只能在“包”里面新建“类”而不能直接在一个空文件夹里建类。所以 IDEA 才会频繁让你 New Package。为什么Access要单独建一个bean包在 Java特别是大数据领域我们非常讲究“分层架构”和“职责单一”。如果你把Access类和AccessSource类全都塞在同一个包里就好比你在前端把“全局状态管理Vuex/Redux”、“公共工具函数”和“具体的页面组件”全扔在同一个文件夹里项目一旦变大绝对是灾难。企业级 Java 项目的标准包结构是这样的com.pk.flink.bean专门放实体类POJO。Access只是用来承载数据的“容器”包含时间、域名、流量它没有任何业务逻辑所以放在bean豆子/实体包里。com.pk.flink.source专门放数据源相关的类。比如AccessSource负责产生数据。com.pk.flink.sink专门放输出相关的类。com.pk.flink.transform专门放数据转换算子相关的类。结论把Access放在bean包里是为了告诉其他程序员“这是一个纯数据模型全项目到处都可以复用它”。如果你把Access写在AccessSource里面作为内部类那其他类想用这个数据结构就抓瞎了。❓ 为什么包名非要写成com.pk.flink这种一堆层级的格式这就是Java 的“域名倒写”规范主要是为了防止类名冲突。前端防冲突用import或者 npm 包名比如vue/core、lodash。Java 防冲突假如你写了一个Access类阿里的大佬也写了一个Access类。如果大家都放在一个叫bean的包里代码一合并系统直接崩溃同名类冲突。为了解决这个问题Java 强制要求使用“公司域名倒写 项目名 模块名”作为包名com.pk代表你们的公司/组织假设你叫 pk。flink代表这个项目叫做 flink 学习项目。bean代表这是实体类模块。这三层加起来com.pk.flink.bean.Access就是你这个类的全球唯一身份证号全限定名。这样就算别人也写了Access只要前缀不一样比如com.alibaba.xxx.Access就不会冲突。 总结实操时怎么判断新建包Package当你觉得“这一类功能应该单独放一起了”。比如今天要写三个数据源那就新建个source包。明天要写连接 MySQL 的工具就新建个utils包。新建类Class只要你要写一段具体的代码逻辑一个 Java 文件就新建类。一个类只干一件事名字首字母大写。前端思维类比com.pk.flink.bean.Access其实就是前端里的src/components/common/Access.ts。com.pk.flink.source.AccessSource其实就是前端里的src/services/AccessSource.js。这就很好理解了吧像在VScode中已经打开的文件默认的文件目录也是展开的idea中已经打开的文件怎么设置其文件目录展开并高亮在 IDEA 里要实现这个效果核心功能叫“Always Select Opened File”始终选择打开的文件。开启后当你切换到任意代码文件时左侧的 Project 目录树就会自动展开、滚动并高亮定位到该文件的位置。设置方法很简单在左侧的 Project 面板上操作找到齿轮图标在 Project 面板的右上角找到一个齿轮形状的设置图标⚙️并点击。勾选选项在弹出的菜单里找到并勾选“Always Select Opened File”始终选择打开的文件。补充如果用的是比较旧的 IDEA 版本这个选项可能叫“Autoscroll from Source”从源代码自动滚动。另外IDEA 默认可能会把高亮的文件停留在面板边缘。如果希望它能尽量居中显示可以在同一个齿轮菜单里一并勾选“Center editor on selected file”或类似选项让定位更精准。你找错地方啦那个搜索框是在“按键映射”里搜快捷键并不是开启功能的地方。要开启“自动定位高亮”请按照以下步骤操作 正确开启方法找到 IDEA 左侧的Project项目面板。点击面板右上角的三个点⋮或齿轮图标⚙️。在弹出的菜单中选择Behavior行为- 勾选Always Select Opened File始终选择打开的文件。⚠️ 如果勾选后还是没效果检查这 3 点视图模式不对检查 Project 面板顶部的下拉框确保当前是Project视图而不是Project Files、Open Files等其他模式。节点折叠如果你打开了文件但目录树没有自动展开可以勾选同一菜单下的Expand collapsed nodes when scrolling to element滚动到元素时展开折叠的节点。缓存卡顿如果以上都试了还是不行可能是 IDEA 缓存卡住了。点击顶部菜单File-Invalidate Caches...- 勾选Clear file system cache and Local History然后点击Invalidate and Restart重启 IDEA。 备用技巧 终极快捷大法不用找菜单如果你实在找不到那个齿轮在哪直接记住这个快捷键一秒搞定光标放在你正在编辑的代码上按下Alt F1然后在弹出的菜单里按回车选择Project View。左侧目录树会立刻展开并高亮定位到当前文件。(如果你觉得每次按Alt F1太麻烦再回头去仔细找找左侧 Project 面板顶部的齿轮菜单吧)快捷键定位无论设置有没有生效随时按Alt F1然后选择Project View就能立刻在左侧目录树中定位并高亮当前文件。全局动作搜索按Ctrl Shift A输入Always Select Opened File回车也能直接触发这个设置。都不是你截图里的这些演示模式、免打扰模式、全屏等是调整整个 IDEA 窗口外观的和左侧文件目录的自动展开、高亮毫无关系。你点错菜单了。请按照下面这张“寻路指南”找 正确的操作位置看你 IDEA 的最左侧边缘有一列竖着的标签点击最上面的Project让文件目录树显示出来。把鼠标放到文件目录树的最顶部就是写着Project的标题栏或者在它右侧的一排小图标里。找到一个齿轮图标 ⚙️或者三个点 ⋮或者一个小箭头∨点击它。在弹出的菜单里找到并勾选“Always Select Opened File”中文版可能叫始终选择打开的文件或从源代码自动滚动。 太棒了恭喜成功找到并开启这就是 IDEA 里最经典的“神级操作”之一。这个选项勾选后你的 IDEA 体验就会非常接近 VSCode 了只要你在右侧点开任何一个 Java 文件左侧的目录树就会像装了追踪器一样自动展开并高亮对应的文件路径再也不用自己去一层层点开找了。给你的探索精神点赞 IDEA 的设置项确实非常多有时候藏得比较深。后续在跟着视频写 Flink 代码的过程中如果还遇到类似 IDEA 操作习惯或者配置上的疑惑随时发截图我来帮你一起“寻宝”继续加油视图模式不对检查 Project 面板顶部的下拉框确保当前是 Project 视图而不是 Project Files、Open Files 等其他模式。这是什么意思没看到视图模式有这些选项哈哈这里是个超级大乌龙是我之前的表述有歧义加上 IDEA 的中文翻译有点“坑”让你找错地方了。你截图里点开的“视图模式”指的是这个面板在屏幕上怎么摆放是固定挂在左边、悬浮在窗口里、还是独立成一个窗口。这和文件怎么显示毫无关系。我之前说的“视图模式不对”指的是面板左上角那个下拉框。 真正的“下拉框”在这里看你截图的最左上角有一个写着“项目 ∨”的地方或者是一个类似小方块的图标。点击那个倒三角∨你才会看到真正的下拉菜单项目 (Project)默认模式按真实的文件夹层级展示也就是你现在的状态最推荐。项目文件 (Project Files)混合展示有时会把隐藏文件也弄出来。包 (Packages)把所有 Java 包拍平显示不显示文件夹层级。打开的编辑器 (Open Files)这个最坑如果你选了这个左边就只有你当前打开的几个文件没有目录树。没有目录树你刚才勾选的“始终选择打开的文件”自然就没有展开和高亮的效果了。 为什么我刚才会提醒你检查这个因为如果你把左上角切成了“打开的编辑器 (Open Files)”左侧就变成类似 VSCode 的“已打开文件”列表了。在这种情况下你无论怎么开启“始终选择打开的文件”它都不会自动展开目录因为目录树根本不存在。只要你左上角的下拉框选的是“项目 (Project)”并且刚才勾选了“始终选择打开的文件”那你的 IDEA 就已经完美变身 VSCode 模式了放心用吧不是你说我都没发现这里是选视图模式的意思这个下拉框的提示∨确实做得非常小而且平时大家点开后很少会去切换它所以特别容易被忽略。既然你截了完整的图我顺便用前端/后端的视角给你“翻译”一下这几个选项到底是干嘛的这样你以后找文件就完全不会迷路了️ 视图模式大解密它们有什么区别项目 (Project) —— 你当前选的最推荐特点完全按照真实文件夹层级显示最直观。前端类比就像 VSCode 左侧的默认资源管理器。你写代码绝大部分时间用这个就够了。软件包 (Packages) —— Java 程序员最爱特点把中间空的文件夹“拍平”折叠起来。比如src/main/java/com/pk/flink/basic它只显示最后一级。如果你的包名很深用这个视图能省很多点击次数。前端类比相当于把src/components/ui/buttons/PrimaryButton.vue简化显示为.../PrimaryButton.vue。项目文件 (Project Files)特点把平时隐藏的乱七八糟的配置和编译文件都给你看比如.idea文件夹里的东西。一般不用。生产 / 测试 (Production / Tests)特点按代码用途分类。只显示src/main里的生产代码或者只看src/test里的测试代码。打开文件 (Open Files) —— 就是之前说的“坑”特点只显示你当前在右边打开了哪几个文件。前端类比非常像 VSCode 顶部的“已打开的编辑器”列表。如果切到这个模式左面板就不显示目录树了你之前设置的“始终选择打开的文件”就失去了意义。临时文件和控制台特点这是 IDEA 自带的“草稿本”Scratch files可以在这里随便写点临时笔记或测试代码不用存在项目里。 结论只要你左上角保持选中“项目”并且刚才勾选了“始终选择打开的文件”你的 IDEA 用起来就已经和 VSCode 一样丝滑了。如果以后你觉得项目目录太长比如src/main/java/com/pk/flink占用了好几行可以偶尔切到“软件包”模式会有意想不到的清爽感。继续愉快地写代码吧