问题引入
最近学习的IO相关问题中几乎都会涉及到关于文件的定义,定义一个新的文件的格式一般为:
File f1 = new File("…(文件的路径)");
其中,文件的路径在书写时如果书写不正确,运行时就会引起一系列异常,如系统找不到文件所在的位置。
一开始以为路径是可以随意写的,导致总会出现这样的问题……
关于文件的两种路径
1.绝对路径
绝对路径指的是文件在硬盘上真正的路径。 在书写时,绝对路径指从盘符开始的路径,形如
“C:\windows\system32\cmd.exe” 的路径。
举个例子:
你的abc.txt是存放在 ” c:/文件夹1/文件夹2/abc.txt “下的,那么 ” c:/文件夹1/文件夹2/abc.txt” 就是abc.txt的绝对路径 。 (完整的路径地址)
2.相对路径
所谓相对路径,就是相对于自己的目标文件位置。
是指从当前路径开始的路径,假如当前路径为C:\windows
要描述上述路径,只需输入“system32\cmd.exe”。
关于文件定义时路径的书写
定义一个新的文件时,对于一个已经存在的文件,在写它的路径时候,可以写它的相对路径或者绝对路径,对于绝对路径,直接从根盘符写到底即可,除了路径有点长……一般是不会出问题的。
但是对于相对路径,有一个细节是需要注意的。
如下图:
举个栗子:
比如拿这个工程下的三个文件(文件夹)来说,“03.jpg”,“hahas”,“IMG01.JPG”,
这三个文件(文件夹)虽然都在这个工程下面,但是存放的具体位置!是有区别的。在写它们的相对路径时,就是相对于当前所在项目的位置,也就是在书写时可以将当前的位置“C:/Users/11310/io”省略掉,其他的要全部写出哦。
对于“03.jpg”,它在当前项目下的src文件夹下的“iostudy”包下,所以相对路径为“src/iostudy/03.jpg”。所以!在写相对路径时不能写成“iostudy/03.jpg”或者“src/03.jpg”。
对于“hahas”,这是一个文件夹,它直接存放于这个项目下面,所以相对路径也就是它的文件夹名称本身了。
对于“IMG01.JPG”,它在该项目下的src包下面,所以相对路径为“src/IMG01.JPG”。不能直接写它的图片名称,否则系统将找不到它。
同时,在写相对路径的时候,也不能加上之前的“C:/Users/11310/io”中的任何一项,因为系统在寻找指定文件或者文件夹时,如果是相对路径,系统会默认在你写的路径前面加上“User.dir”,即:用户的当前工作目录,如果你自己加上前面的某一项,必定会出错哦。
关于文件拷贝时拷贝文件路径以及名称的书写
文件路径
在实现文件的copy时,在主方法中往往要定义两个新的文件,一个是被copy的原文件,一个是新的目标文件,定义新的文件时,书写文件的路径同样也是两种方法。
1.绝对路径
你可以将目标文件的绝对路径直接写出。
2.相对路径
如果写的是相对路径,和上面强调的细节问题一样,不能出现当前所在位置之前的文件夹名。
很多情况下对于目标文件,只写一个文件或者文件夹的名称,默认生成在该项目下,原理就是将目标文件生成在User.dir+目标文件名称 的位置下。
文件名称
然后就是文件的名称,也有一个细节。
由于要拷贝的文件类型有很多种,比如txt文件,java源文件,jpg格式或者png格式的图片文件,都可以进行拷贝。
文件的类型不同,其文件名称后面的后缀也就不同,所以,最好的习惯就是,在目标文件中的文件名称后面加上要拷贝的文件类型的相应后缀。
原文件是一个jpg格式的图片,那么目标文件也最好写为jpg文件。emmmmmmm不过如果你实在闲的无聊,写成png的后缀也行。
但是!如果你只写一个文件名称不加任何后缀,就会产生一个什么都不是的文件,你也就没办法拷贝到自己想要的图片了哦。
所以说,一定要有好的习惯!!记得加上后缀!!
特别地,对于非图片类的文件,如果不加后缀,系统会默认copy成一个txt文件哦。
比如:
一个java源文件,如果目标文件不加后缀,系统就会将原文件中的代码copy到一个txt文件中……
总结
总之就是,一定要有好的习惯,最好在文件名后加想要转成的文件格式的后缀,避免不必要的错误发生。
并且!书写相对路径时也要注意之前提到的细节。