00:00
行了,那咱们就接着再往下吧,啊,再往下啊。那么再往下呢,我们研究一下什么呢?哎,我们研究一下这个。这个路径的事儿,各位。啊,研究一下径的事儿。啊。新建一个啊。Pass就是关于的问题。研究一下路径,研究一下文件路径的问题,有同学老师怎么讲着讲着反射机制突然之间就就研究这个路径了呢,是因为什么呀?因为我们在这里呢,大家看是不是我们在这里有个路径,哪哪哪有个路径啊跑了。打开这个。大家看这个地方是不是有个文件路径,你有一个file reader的时候,这个这个位置需要跟一个路径嘛,这个路径你说这样写会有什么问题啊。
01:06
以后我们天天这样去写径,有什么问题啊,大家思考一下。虽然这样写在idea里面能够执行,那我问大家这样写有什么,有什么问题没有?通用不通用,思考一下。也不容易写错。只能用idea才能找得到。对,宇阳说的太棒了,要的就是这句话。因为这个程序现在是在idea当中。那么在idea里边,当前路径是什么?是项目的根,是这个工程,Project是project的,你明白什么意思吗?是的。但如果说你这个代码你换一个别的位置呢,换个别的位置之后,你就会发现当前路径啊,它可能不是工程的根了。所以这个时候就会出问题,你这个代码只要一一移植,一换个地方就废了。
02:02
那得用绝对路径是吧。所以我才教你。我们研究一下文件的路径,对吧,这种方式它存在一个什么样的缺点?啊,我跟大家说一下啊,解释解释,然后呢,我们去学一学啊,这个例子还是比较重要的啊,比较重要的来我们把这个路径研究明白之后呢,哎,我们再去干什么呀,继续往下学这个反射机制,各位啊,继续往下学这个反射,反射机制,这个研究明白了,再往下研究这个呗,研究这个呗,研究这个呗,是不是?哎,有的研究啊,多了去了,那现在咱们正在研究这个啊,但是这呢,稍微拐个弯,各位啊,拐到哪了呢?拐到这个关于径这块的一个问题了。对我来说一下啊,这种方式的路径缺点是。一致性差。啊,移植性。移植性差啊,在idea中,默认的当前路径是project的。
03:04
在idea中,默认的当前路径是project。它的根。这个代码只要换一个位置,可能大家了解不是,哎,这个代码假设啊,离开了idea,换成换到了其他位置。啊,换到了其他位置,可能当前路径就不是project的根了。啊,这时这个路径就无效了。所以我们以后不会这样去做。不会这样去做,各位啊,我在这里告诉大家一种方式啊,这种方式呢,哎。它代码比较多,但是这种方式比较通用,接下来啊,接下来说一种什么呢?比较什么通用的一种。通用的一种路径。
04:00
啊呃,即使即使代码移植了啊,即使代码移植了。啊。即使代码换位置了吧,换位置了啊,这样编写仍然是通用的啊,接下说一种比较通用的一种路径啊,即使代码换位置了,这样编写仍然是通用的,怎么写呢?这样写各位,但有个前提啊,这种方式只适合什么呀,你的。文件放在类路径下的。只能是放在类路径下才能才能使用这种方式,各位啊。注意啊。使用以下通用方式的前提是,是什么是你这个文件,这个文件必须在类路径下。有同学就问了,什么是类路径?
05:01
什么是?凡是在src下的。都是类路径下,记住它。啊,各位。啊。凡是在S2C下的都叫类路径下,S2C是类的根路径,注意啊,S2C是类的什么根路径?啊,注意啊,这种方式其实有这种方式的好处。对吧,你看这种方式获取的这个class in for property这个文件在哪啊,没有在src下,这个文件是不是在这个模块的下边,对不对,哎,Mo。是不是在这个啊,在这个model的下面。如果我讲的这种方式。你获取这个文件的路径,你就获取不到各位啊,获取不到。我讲的这种通用的方式,前提是你这个文件是在你的类路径下。
06:01
啊,类路径下呢?什么是类路径下,我说在src下边都叫类路径,而并且src是类的根路径。哎,我们在这儿呢,去去去给一个文件,各位啊,来复制一下,我们贴过来放到这儿来,OK,这个文件你看现在在SS2C下吧,然后这个文件呢,我给它重新改个名,各位啊,改个名。Shift f6改个叫二吧。给他改个名字啊。读一下啊。就这个文件,我现在想获取这个文件的路径怎么获取。好,这样获去各位啊,大家看好了,Thread线程又和线程挂钩了,各位啊,这一行代码你不理解,你背背会啊,这一行代码你不理解,你背也要背会,各位啊,点current thad.get。Get什么呀?contact.get resource。
07:00
点get pass。注意这行内容比较长,各位thread current thread get contact class get resource。有的老师这什么东西,这啥玩意儿,这都是嗯。Thread thread是当前。啊。解释一下,TH,你这个听不懂啊,你也别听懂了,这个你听不懂啊,他就这种写法,Thread context,呃,Thread current thread是当前线程对象。然后这个get是现成的方法。啊,是线程对象的方法,可以获取到当前线程的类加载器对象。他这个方法拿的是类加载器对象。
08:02
这是当前线程,叫get contact class logo拿的是当前线程的类加载器。类加载器挺多的,各位啊,类加载器是实际上是挺多的。挺多的啊。类加载器有好几种呢。啊,有启动类加载器,扩展类加载器和应用类加载器三大类加载器,JDK里面内置三个类加载器的。啊,什么启动类扩展启动类加载器啊,对吧?哎,应用类加载器啊,啊,还有扩展类加载器啊,这是比较高深的一些东西了啊。一会儿我也可以给大家说一说,讲一讲,聊一聊行吧,啊这个东西呢,你要听不懂就算了啊,听不懂就算了,因为这个是比较高端的一些东西。啊,咱们分享一些高端的东西,这样会好一些,是不是thread current thread拿当前成get contact的class loader是用来获取当前现成的一个类加载器,当前线程类加载器,这是个类加载器,它的get rest resources,这个方法是谁的方法?是类加载器的方法。
09:04
啊,这个是这是类加载器对象的方法。啊。默认就是类加载器啊。当前线程的类加载器默认从类的根路径下加载资源。这个get表示获资源啊,这个方法你一翻就知道是获取什么呀,资源叫做获取资源,Get是获取资源,当前线程的类加载器去获取资源的时候,这个方法上需要一个参数。注意或当前线程类加载器默认是从类的根路径下加载资源,而你这个文件恰好放在类的根路径下。所以。你这边直接写他就行。
10:02
那老师你在干什么?我们就这样可以拿到的绝对路径,各位大家好了。执行。我们来看这个叔叔的pass。大家看这是不是一个绝对路径?看见了。这是不是拿到这个文件的绝对路径了?采用这种方式,采用以上的代码,可以拿到一个文件的绝对路径。啊,Thread c当前线程get contact class loader,当前线程类加载器去获取资源的时候,从类的根路径下作为起点,记住这个位置起点啊,这个起点是从类的根路径下开始加载,而你这个class info2这个文件正好是在src下,Src就是类的跟路径,所以这个位置啥也不用写,直接写class info2点properties,然后整个这个方法执行结束之后,还得调get pass这个方法来获取路径,啊,这个路径恰巧就是绝对路径。
11:15
这个代码就绝对的通用。各位。这个代码是绝对通用。啊,就是你你你你的环境再怎么移植,就你这个东西再怎么变,再怎么移植,只要你这个资源在类的根路径下,只要你这个资源在类路径下错了啊,只要你的文件是放在类路径下的,那么你采用这种方式都可以获取到这个文件的绝对路径,前提有一个前提,各位啊,就是你要获取的这个资源一定是在类路径下才行,你逃出了SC在外边这些东西,对不起,采用这种方式你就获取不到了。那你就获取不到了,明白什么意思吗?明明明白什么意思。来我们我们再来一个各位啊,假如说现在我想拿到这个BJ power node。或者说这个吧,我想拿到这个。
12:07
如果。是到获取资源填一个类名,可以直接加载类是吗?嗯,什么加载,加载什么类。不能。不能啊,不行啊,来注意我想获取这个文件。它的这个路径。Copy pass啊这个呀,我的天呐,你这种方式有一个问题,你知道吧,你知道这种方式有什么问题吗。你你万一将来这个项目移植到移植到那个Linux里边呢。有同学说,老师我干嘛这样写,折腾半天我还不如这样写呢,我new一个file,直接CTRLCCTRLV粘过来,粘过来之后我把后边路径咔嚓干掉,干掉之后呢,我把这个绝对路径咔嚓复制一下,我复制一下这个绝对路径之后,我放到这个地方,老师这样不行吗?
13:09
老师,我以后用绝对路径不行吗?不行,因为你要记住你的程序有可能放在Linux环境下。Linux系统明白吗?你的眼睛只放在Windows上了,是吗?Windows有C盘D盘E盘,那我问你。Linux这个系统有没有这个什么C盘D盘有没有这一说。没有吧,我问大家一个问题啊,我的这种写法是不是在Linux环境里边也适用?跨操作系统,操作系统变了,是不是这样获取的,这个绝对路径就是就是操作系统没用过。Mac用过吗?MacBook见没见过?MacBook里边没有盘符。MacBook它是一个一个这个Linux Linux的一个一个内核。
14:04
买不起。好了,咱不要把天聊死好吧。把天天一下聊死了啊来咱们继续了,各位啊,这种方式是适合于各种操作系统的,适合于各种环境的。明白吧,哎,适合于各种操作系统,各种环境。嗯,这种方式获取文件绝对路径是。通用的。我们再来一次。我们现在想。获取这个文件的路径怎么获取,各位。这个文件啊,它是个Java文件,打开大家看这是不是u.Java呀,u.javava它是个Java文件啊,来我们获取这个Java文件的绝对路径,来获取Java文件的绝对路径。
15:11
哎,别获取没有意义是吧,没有义,这样我在我的这个B目录下呢,我新建一个文件吧,这个文件,这个文件呢,我就叫做db.properties。就这么一个文件嘛,我想获取这个文件的一个一个一个一个路径,各位应该怎么获取。获取db.properties文件的绝对路径。好各位啊,注意听课啊,注意听课,我再强调一下这个db.properties这个文件呀,它在B下边,它呢是在src下的,所以我问大家这个文件在不在类路径下。因为我刚才说过了,只有在类路径下的东西,我们才可以使用上面这种方式,对不对?来,我们试着获取一下啊,PASS2等于thread.thread.current thread.get contact class。
16:04
啊,然后点get什么样,Resource这个地方的路径怎么写,点get past这个方法。那么这个gallery resource后面这个地方的路径怎么写啊?你你你默认默认类加载器从哪从类的根路径下作为起点吧。是不是类的根路径起点是谁,是不是come啊,所以这边你是不是应该写come car。谁呀?BJ power node-Java-B杠什么?哎,不是不叫BB啊杠叫什么呀?DB点什么?哎,Properties你必须得这样写,各位啊,就是你从类的根路径上作为起点开始。注意啊,从类的根路径下作为起点开始,作为起点开始啊,前面什么什么你都不用写,因为这个。com在S2C下面,S2下面就是com,这个起点就是S2C开始就行了,那么接下来我们把这个PASS2呢输出一下,我们来看一下。
17:13
好,大家看这是这个路径,你看。CHAPTER25吧。然后有个com BG的Java Java b,你看Java Java b,然后DB properties。是吧,哎,这样就拿到了各位。这种方式用来获取绝对路径的啊,研究一下录文件路径的问题。就是怎么获取一个文件的绝对路径。以下讲解的这种方式是通用的,但是前提是,但前提是文件需要在哪。类路径下。才能用这种方式,别嫌我啰嗦啊,我又说一遍。想获取文件绝对路径,你就采用这种方式就行了。
18:04
啊,以后你的东西都放到src下面,你想获取的话,你就采用这种方式获取。获取到绝对路径。啊,绝对路径。
我来说两句