如何理解Java中的包机制,如何有效使用JavaDoc生成文档
一般用公司域名倒置作为包名:如百度网址www.baidu.com,包命名为com.baidu.www(com.yang)
包必须在类的最上面,导入包使用语句import package 包名.(是通配符代表包名下所有内容)
搜索:百度搜阿里巴巴开发手册学习Java基础
JavaDoc命令是用来生成自己API文档的
jdk帮助文档(浏览器搜索)
选择类右键选Show in explorer可进入类存储地址,在类地址前进入cmd,并输入javadoc -encoding UTF-8 -charset UTF-8 类名.java,执行后会在类存储地址生成index.html文件,点开之后是我们自己写的类的帮助文档说明
idea生成Javadoc文档
- 首先新建一个文件夹,用来专门存放Javadoc文档
- 打开idea选择要生成文档的代码
- 选择之后就看idea的顶部有一个Tools的菜单,选择Generate JavaDoc这个选项
- 然后会弹出一个界面,然后在Output directory 输入框后面的按钮点击进去选择刚才创建的文件夹
- 然后在下面的locale框中输入zh_CN,这个代表的就是中文,输完之后在locale下面的框中输入-encoding utf-8 -charset utf-8
- 最后点击ok,等待文件生成完毕之后,执行后会在JavaDoc文件夹生成index.html文件,点开之后是我们自己写的类的帮助文档说明
Java 文件夹神器:Files.createDirectories,自动开路,不服来战
程序猿的日常挑战之一:当你面临复杂的文件夹结构,路径像迷宫一样蜿蜒曲折时,手动创建目录层级可真是一场艰难的“打怪”旅程!有没有搞错,我可是来写代码,不是来堆积木的!好在,Java 的 Files.createDirectories 犹如编程界的开路神器,能够一行代码搞定所有所需目录,无论路径多么复杂,都能轻松一键直达。今天,就让我们一起揭开它的神秘面纱,看看如何运用这个利器,轻松实现目录的自动创建,解放你的双手,提升你的开发效率!
Files.createDirectories 是 Java 编程中的一颗璀璨明珠,它能够一次性创建多层文件夹,宛如代码世界的“万事通”。如果你面临的目录结构中有任何缺失的层级,它会像魔法师一样自动填补,让你瞬间拥有整齐划一的文件夹层级,既简洁又高效。使用它之前,你再也无需为复杂的文件路径感到头痛!只需轻松调用,只要路径存在或顺利创建,它就能圆满完成使命,助你在编码的旅程中如鱼得水!
路径(Path):在文件系统中,路径就像一张详细的地图,指引你到达特定的文件或文件夹。想象一下,没有它,你就像在海上航行,没有方向盘,随波逐流!
文件夹结构(Directory Structure):文件夹的层级结构就像家里的楼层,合理的布局让你快速找到所需的“房间”。一个整齐的文件夹结构就像一个干净的家,让你心情愉悦,不再在找东西时翻箱倒柜!
异常处理(Exception Handling):处理代码中可能出现的错误和异常的机制。它就像一位机智的保镖,时刻准备应对突发状况,确保你的代码在遭遇意外时仍然能稳如泰山,顺利运行!
自动创建多层文件夹:这个功能就像一位高效的建筑师,能够一口气完成所有不存在的文件夹,毫不费力地为你搭建起整齐的目录大厦,再复杂的路径也不在话下,让你轻松拥有条理分明的文件结构。
内置异常处理:遇到不合法路径或创建失败时,它就像一位严谨的法官,能迅速抛出明确的异常,确保你的代码不被无情的错误拖入深渊,保持稳定运行。
文件权限控制:创建文件夹时,它能像一个忠实的守卫,严格把关权限,确保在任何系统中都能顺利通过,不让不必要的权限问题成为你的绊脚石!
Files.createDirectories(Path dir) 是 Java NIO(New Input/Output)包中的一颗璀璨明珠,专为路径处理而生。与传统的 mkdir 方法相比,它简直就是“懒人救星”,能够自动创建路径中缺失的所有父文件夹,彻底告别繁琐的手动检查,无论你的路径有多复杂,它都能轻松搞定。只需轻松调用 Files.createDirectories(Path dir);,而 dir 则是一个 Path 对象,代表你所需目标文件夹的路径。就像一张精确的导航地图,它确保你的文件在程序的世界中畅通无阻,任你在编码的海洋中遨游,再也不需要担心文件夹是否存在的问题,轻松开发,快意人生!
创建文件夹的思路流程就像是制定一场完美的旅行计划,步骤简单易懂:
1.确定文件夹路径:首先,就像策划一场激动人心的旅行,你需要为自己设定一个明确的目的地。在这个阶段,清楚地明确你要去的地方,也就是你的文件夹路径。无论是一个简单的“我的文档”,还是一个复杂的多层结构,确保你对目标有清晰的认识,才能顺利出发。毕竟,没有导航的旅行就像迷失在代码的海洋中,确定路径不仅让你少走弯路,还能让接下来的旅程更加顺利,避免那些令人抓狂的“路径错误”!
2.使用 Paths.get() 方法:接下来,借助 Paths.get() 方法将字符串路径转换为 Path 对象。这就像为你的旅行选定一辆舒适的交通工具,确保一路平稳顺畅。在这一步,你将字符串路径变成可以操作的“交通工具”,让你的代码能够顺利通行。在这个阶段,确保你选的“交通工具”不仅能容纳所有的行李(文件夹),还要在各种复杂路况中轻松自如,避免在编码的旅程中遭遇“交通堵塞”。选择得当,旅程自然无忧!
3.调用 Files.createDirectories():最后,轻轻一呼叫 Files.createDirectories(),就像请来了一位经验丰富的旅行向导。只需一行代码,它便能为你自动创建所有需要的文件夹,确保你在编码的旅途中畅行无阻,尽情享受每一个“停靠”点,不再为路径的复杂性而烦恼。这位“向导”不仅高效,还能避免你在“文件夹迷宫”中迷失方向,让你的代码清晰有序,编写过程变得轻松愉快,仿佛每一次创建文件夹都是在开启一段新的冒险旅程,乐趣无穷,效率满分!
以下是一个简洁易懂的 Files.createDirectories 示例:
当路径 C:/Users/Administrator/Desktop/file/xjbcm 不存在时,代码会自动创建整个路径,就像一位高效的工匠,迅速搭建起所需的“家园”。如果文件夹已存在,程序将优雅地跳过创建步骤,并输出“文件夹创建成功”,让你无需担心重复造房的问题。无论成功与否,这段代码都能让你在编程旅程中如鱼得水,轻松享受创建文件夹的乐趣!
程序员小张是一位热爱编码的年轻人,平日里总是埋头于代码之中。有一天,他接到一个任务,要求在文件系统中创建一个复杂的多层文件夹结构。小张心中暗想:“这不过是小菜一碟。”于是,他点开文件管理器,准备开始这项“艰巨”的任务。
随着每一个新文件夹的创建,小张感觉自己就像在参加一场马拉松,脚步渐渐沉重。他从第一个文件夹开始创建,逐渐到达了第十层。就在这时,他不禁吐槽道:“再多来几层,我就成‘搬运工’了!”说着,心里开始默念:“就不能给我一条一键创建的路吗?”
正当小张感到烦恼时,他的同事小李走了过来,看到小张面前密密麻麻的文件夹,不禁捧腹大笑:“兄弟,你这是在做文件夹的分娩术吗?还是在练习雕刻呢?”小张无奈地撇撇嘴,继续用鼠标不停地点击。
“小张,何必这么辛苦呢?”小李拍了拍他的肩膀,笑着说:“你知道 Java 有个 Files.createDirectories 方法吗?只要一行代码,就能自动创建所有需要的文件夹!不信我给你演示一下!”
小张眼前一亮,简直不可思议:“这也太神奇了吧!”于是,小李迅速打开了 IDE,几下功夫就写了一段代码,轻松调用 Files.createDirectories() 方法。只听“咔嚓”一声,所有的文件夹瞬间在系统中出现,宛如魔法般神奇。
小张瞪大了眼睛,心中暗自庆幸:“我竟然在手动创建文件夹上浪费了这么多时间,简直是自己给自己找麻烦!”从那以后,小张立刻转变了自己的工作方式,告别了“搬砖式”的手动创建,享受起了编程带来的乐趣。
不久后,公司的效率显著提升,老板也给小张加了奖金,生活质量大幅提高。小张开玩笑说:“感谢 Files.createDirectories,让我从‘搬运工’变成了‘码农精英’!以后再也不怕复杂的文件夹路径了,轻松愉快,生活美满!”
于是,小张的故事在公司里流传开来,大家都开始用 Files.createDirectories 方法创建文件夹,纷纷表示:“这简直是程序员的福音!”每当有人再提起创建文件夹的烦恼,大家都会齐声调侃:“要不你试试 Files.createDirectories?绝对不会让你成为‘搬运工’!”
就这样,小张的幽默故事和高效方法成为了大家茶余饭后的笑谈,让整个团队在编码的旅途中多了一份欢声笑语,也让程序员们不再为繁琐的文件夹路径感到头疼,轻松享受每一行代码带来的乐趣!
1.路径中有非法字符怎么办?
如果路径中包含非法字符,代码会抛出异常,就像程序在说:“嘿,小伙伴,这条路我走不了!”所以,创建文件夹之前,最好先确保你的路径干净整洁,没有系统不支持的字符。
2.文件夹已存在会重新创建吗?
绝对不会!Files.createDirectories 就像个聪明的侦探,发现文件夹已经存在时会默默绕过,不会重复创建,只为那些缺失的部分出手,确保你的代码简洁高效。
3.权限不足怎么办?
遇到权限不足的情况,就像在派对上被拒之门外,提前检查读写权限是个好主意。确保你拥有必要的权限,让你的文件夹创建之旅畅通无阻,快乐无比!
1.批量创建复杂目录结构:想象一下,你正在开发一个大型项目,需要建立多层次的文件夹结构,如“项目/模块/资源”。使用 Files.createDirectories,你只需一行代码,轻松搞定这一切,省去了一次又一次的手动创建,仿佛变成了高效的文件夹建筑师,随心所欲地构建你的项目天地!
2.动态创建日志或缓存目录:当你的程序需要记录大量的运行日志或者缓存数据时,Files.createDirectories 来助你一臂之力。无论日志文件夹是“运行日志/2024年/11月”还是“缓存/用户数据”,它都能迅速搭建起这些结构,让你的数据管理如虎添翼,再也不用担心路径问题。
3.数据备份,自动创建日期层级的备份文件夹:在备份数据时,想要按日期组织备份文件夹?Files.createDirectories 是你最佳的选择!只需一行代码,它就能自动为你创建像“备份/2024/11/04”这样的层级结构,让你的备份工作整整齐齐,随时都能轻松找到需要的文件,绝对是效率与条理的完美结合!
在使用 Files.createDirectories 时,有几个关键的注意事项,确保你的编程之旅顺畅无阻:
1.确保路径合法:在编写代码之前,首先要确保你的路径合法,避免那些让你头疼的特殊字符。像“*”、“?”、以及其他系统不支持的字符可不能出现在你的路径中,毕竟我们可不想因为一个小字符而让代码出错。检查一下路径,就像在购物前看看清单,确保不会买到奇怪的东西!
2.权限设置:在某些受限的文件系统或操作系统中,确保你有权限在指定路径写入文件夹。想象一下,你在一家豪华餐厅用餐,结果发现没预订座位,只能在门口干等。提前检查你的文件系统权限,确保你能顺利创建文件夹,别让权限问题把你“拒之门外”。只有准备充分,才能让你的代码如鱼得水,顺畅创建文件夹!
牢记这些注意事项,让你的编码过程如行云流水,顺利而又高效!
优点:
1.简洁高效:使用 Files.createDirectories,你只需一行代码就能轻松创建多层目录。这就像开车上高速,一路畅通,轻松到达目的地!不再需要为每个文件夹逐个手动创建而烦恼,直接享受代码带来的效率提升。
2.自动跳过已存在路径:该方法会智能判断路径是否已存在,已经存在的部分会被优雅地跳过。这就像一个懂事的朋友,明白你已经完成的事情,绝不再让你多做无用功,省时省力,让你更专注于更重要的代码逻辑。
缺点:
1.异常处理:如果提供的路径非法或没有足够的权限,依然会抛出异常,导致你需要额外处理这些情况。这就好比参加一个派对,结果发现没被邀请,你还是得面对尴尬局面。在使用 Files.createDirectories 时,记得给自己留条后路,提前处理这些可能的错误,以免让你的代码之旅中途“熄火”。
1.路径合法性检查:在调用 Files.createDirectories 之前,务必先检查路径的合法性。就像你出门前要确保钱包和手机都带齐,不然可就尴尬了!确保路径不包含系统不支持的字符,以免在创建目录时遭遇“拦路虎”,让你的代码之旅陷入困境。
2.异常处理:使用 try-catch 块来捕获潜在的文件系统异常。这就像你在滑雪前检查安全设备,确保万无一失。如果路径不合法或权限不足,你的程序不会因小失大,而是优雅地处理错误,保持稳定运行。
3.动态路径:推荐使用相对路径,并在程序启动时动态构建。这种做法就像你的行李箱,能根据不同旅行目的地进行灵活打包,提升程序的适应能力。相对路径让代码更具可移植性,无论你是在本地环境还是生产环境运行,始终能够找到正确的文件夹,确保程序“无忧出行”。
Files.createDirectories 无疑是 Java 文件操作的“神器”,犹如程序员的秘密武器,轻松实现一键创建多层目录的便捷体验。不论路径有多复杂,这个神器都能帮你迎刃而解,让你从繁琐的手动创建中解放出来。使用它,不仅能提升代码的可读性和整洁度,还能大幅节省开发时间,帮助你以更优雅的方式完成任务。让我们告别“堆积木”的烦恼,迎接简洁、高效的编码之旅!
用 Java 的 IO 流进行读写文件操作
前面四篇文章给大家汇总了一下 Java 编程中那些绕不开的接口,给大家介绍了 Java 的几个基础 Interface 以及内置的函数式接口,接下来两篇文章我们简单的过一下Java IO 方面的基础,本篇文章会先大概说下 Java 的 IO 流,以及怎么用它们读写文件,下一篇会讲一些文件系统相关的操作,比如怎么创建删除文件或者目录这样的常用操作。话不多说,一起开始我们的学习吧!
在计算机领域里 IO,有时也写作 I/O,是Input / Output的缩写,也就是输入和输出。这里的输入和输出是指不同系统之间的数据输入和输出,比如读写文件数据,读写网络数据等等。
本文内容大纲如下:
Java 中有三代 IO 框架,分别是第一代的同步阻塞 IO (也叫 BIO, Blocking IO),第二代的NIO ,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层的高性能数据操作方式。第三代 NIO2 有的地方也叫 AIO,即Async IO,进一步支持了异步IO。
这些 IO 框架都是针对文件的,网络通信同样属于 IO 行为,但是被 Java 单独放在了 java.net 包下,不在这里说的 IO 体系内。
这个教程中我们来学习 Java IO 体系中最简单和易于理解的同步阻塞 IO,后面有了这里的知识积累后再去进一步学习 NIO 和 AIO。
同步阻塞 IO 即 BIO(blocking IO),指的主要是传统的 java.io 包,它基于流模型实现。java.io 包提供了我们最熟知的一些 IO 功能,比如我们已经介绍过的 File 对象提供的文件和目录操作,还有一大块就是通过输入输出流读写文件等。
BIO 交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在完成之前,线程会一直阻塞在那里。多个 IO 调用的执行顺序是线性顺序。不过 BIO 的优点是代码比较简单、直观,虽然不适合在高并发场景下使用,但足够应对普通场景,同时也更容易学习和掌握。
IO 流是 Java IO 中的核心概念。流是在概念上表示无穷无尽的数据流。IO 流连接到数据源或数据的目的地,连接到数据源的叫输入流,连接到数据目的地的叫输出流。 Java 程序不能直接从数据源读取和向数据源写入,只能借助 IO 流从输入流中读取数据,向输出流中写入数据。
Java IO 中的流可以是基于字节的(读取和写入字节)也可以基于字符的(读取和写入字符),所以分为字节流和字符流,两类流根据流的方向都可以再细分出输入流和输出流。
- 字节流 输入字节流:InputStream 输出字节流:OutputStream
- 字符流 输入字符流:Reader 输出字符流:Writer
这里有一点可能容易让人迷惑的是,IO中的输入和输出指的是相当于程序的输入和输出,程序向外输出内容,会向输出流里写入,虽然写入操作看似是输入,但相对于程序本身而言它是在向外输出内容。所以程序写的是OutputStream 读的是InputStream。
字节流主要操作字节数据或二进制对象。 字节流有两个核心抽象类:InputStream 和 OutputStream。所有的字节流类都继承自这两个抽象类。 ##
字符流和字符流 字符流操作的是字符,字符流有两个核心类:Reader 类和 Writer 。所有的字符流类都继承自这两个抽象类。
字节流和字符流都有 read()、write()、flush()、close() 这样的方法,这决定了它们的操作方式近似。
- 字节流的数据是字节(二进制对象)。主要核心类是 InputStream 类和 OutputStream 类。
- 字符流的数据是字符,主要核心类是 Reader 类和 Writer 类。
所有的文件在硬盘或传输时都是以字节方式保存的,例如图片,影音文件等都是按字节方式存储的。字符流无法读写这些文件。
所以,除了纯文本数据文件使用字符流以外,其他文件类型都应该使用字节流方式。
字节流到字符流的转换可以使用 InputStreamReader 和 OutputStreamWriter。使用 InputStreamReader 可以将输入字节流转化为输入字符流,使用OutputStreamWriter可以将输出字节流转化为输出字符流。
下面我们通过一个读写文本文件的程序来演示一下字节流到字符流的转换以及 Java IO 的基本操作。
Java IO 中的类非常多,对应的方法也很多,一一罗列会导致内容过于枯燥,所以我们写两个用 IO 流写文件和读文件的例子,来展示下怎么使用 IO 流读写文件。
下面主要使用的是 FileOutputStream / FileInputStream 把 IO 流绑定到 File 对象上,然后将这两个字节流通过OutputStreamReader / InputStreamReader 转换为字符流,并设置字符编码,最后再用 PrintWriter / BufferedReader 给字节流增加缓冲更能,让程序能更方便地以行为单位操作 IO 流。
理解和掌握了这两个基本的用法后,其他 IO 流的使用也就不是什么难事儿了。
我们先来个写文件的示例小程序,在这个程序里面除了用到了 Java 文件、字节输出流等相关的知识外,还会用到我们前面在 Java 异常通关指南里讲过的帮助我们自动回收已打开资源的 try-with-resource形式的异常处理,Java 交互式获取命令行输入的 Scanner工具等。算是对我们专栏以前知识的一个实践应用和复习。
如果你对这些知识还有点生疏或者忘记了,也不用先着急回看,在这个示例程序的注释里会把这些知识点进行相关提示,下面也有对程序每个重要部分的详细解释,我们先来看例子。
这个例子里我们运行程序后,Java 程序会在命令行界面等待用户的输入,先让用户从命令行界面输入想要保存内容的文件的名字,再让用户输入内容。内容支持多行输入,直到遇到空行,程序会认为输入完毕,然后 Java 用用户指定的名字在项目目录下创建一个文件,最后把程序读取到的所有内容输入,写到文件里去。
这个示例程序里我们需要重点关注以下几个方面的知识点
- 上面例程里使用了Scanner,以命令行交互的方式让我们能输入程序将要创建文件的名称和要往文件里写入的内容。
- Java 的 IO流在使用完成后需要统一调用close()方法把流关闭掉。IO流的关闭会让程序释放出它们占用的内存资源,而且字符流操作时使用了缓冲区,并在关闭字符流时会强制将缓冲区内容输出,如果不关闭流,则缓冲区的内容是无法输出的。
- 如果想在不关闭流时,就将缓冲区的内容输出到文件,可以调用流的flush()方法强制清空流使用的缓冲区。
- 上面的示例程序里我们使用了try-with-resource形式的异常处理,把资源的关闭交给了Java– 在资源被使用完成后或者程序出现异常终止执行时都会由 Java 自动关闭在try-with-resource中打开的流资源。
- 把字符串内容写入到文件的程序中,我们首先使用了 FileOutputStream 把目标文件绑定到字节输出流,再用 OutputStreamWriter 创建一个可以使用OutputStream的Writer,并指定其字符集为UTF_8,这样程序就能一个字符一个字符地写入文件啦。
- 接下来程序在OutputStreamWriter 字符流的基础上创建了 PrintWriter,使用 PrintWriter 可以让程序方便地写入字符串,并且也可以通过它的 println 方法来自动处理换行符。
用 Java 程序完成文件的写入操作后,我们再来看看,给定一个文件,怎么用 Java 程序读取器中的内容。
我们先在要执行程序的目录下,添加一个测试用的名为 file.txt 的文本文件,如果是用Intelij IDEA 这样的 IDE 工具执行程序的话,可以在项目根目录下添加这个文件。
创建好文件后,在文件里随便输入几行内容用于测试:
接下来我们用 Java 程序读取这个文件里的内容,这次我们则是会用到 IO 输入流相关的几个类: FileInputStream, InputStreamReader, BufferedReader等;他们的具体功能作用我写在了程序的注释里
上面这个示例程序会用 Java 的 IO 输入流从文件中每次读取一行,并把行内容应用 toUpperCase() 方法后输出到终端,程序里打开的流资源的方式仍然是交给try-with-resource机制自动处理,这里不再赘述。
和输出流一样,在读取文件内容的程序中我们也做了字节流到字符流的转换,先用 FileInputStream 把文件绑定到了字节流上,然后通过 InputStreamReader 把字节流转换为字符流,在这个过程中也是设置了字符编码,最后又用 BufferedReader 为字符流增加缓冲功能,这样读取的效率会更高一些,通过它程序可以一次读取文件的一整行。
通过 BufferedReader 的 readLine()遍历或者 lines() 获取Stream 后进行流处理,都可以用 BufferedReader 完成文件内容的遍历读取,上面在程序代码和注释里我们演示了两种遍历 BufferedReader 的方法。
这篇文章我们介绍了 Java IO流里面的各种流,比较难记,常用的怎么把文件转成文件流,文件流转成字节和字符流以及设计字符的编码都给大家介绍了,把文章中提供的两个例子看明白差不多就算入门了。
下一篇文章我们在总结梳理一下 Java 中常用的目录和文件操作
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。