Java File类库
来源:互联网 发布:中学生机器人编程 编辑:程序博客网 时间:2024/05/21 08:50
Java的File类库里有许多API,可以让我们很方便地调用。比如说:我们可以得到文件所在磁盘的大小、可用空间、已用空间;还可以得到文件的各种属性(读、写、执行);还可以进行一些基本的文件操作(创建文件、创建临时文件、创建文件夹等)
在这些操作中,有一些很容易用错,我在这里记下备忘。
一、关于Canonical和Absolute的事
Canonical意思为标准的,而Absolute为绝对的。 对应的词:CanonicalPath / AbsolutePath 就是标准路径、绝对路径。在Java API里有4个相关的方法。分别是:
①public String getCanonicalPath()
②public String getAbsolutePath()
③public File getCanonicalFile()
④public File getAbsoluteFile()
其实这四个方法都差不多。我们先来说说Canonical 和 Absolute的区别。Canonical 是标准的路径,而Absolute是绝对路径,它们之间唯一的区别就是Canonical能解析路径中的“." 和 ".." (分别代表当前路径和上一级路径)。比如:
比如当前的路径为 C:\test\abcdirectory.getCanonicalPath(); //得到的是C:\test\abcdirectory.getAbsolutePath(); //得到的是C:\test\abcdirecotry.getPath(); //得到的是abcdirectory.getCanonicalPath(); //得到的是C:\testdirectory.getAbsolutePath(); //得到的是C:\test\.direcotry.getPath(); //得到的是.directory.getCanonicalPath(); //得到的是C:\directory.getAbsolutePath(); //得到的是C:\test\..direcotry.getPath(); //得到的是..# 对于getCanonicalPath()函数,“."就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹
# 对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径
# 至于getPath()函数,得到的只是你在new File()时设定的路径
而getXXXFile()的作用是什么呢?它是File对象才能调用的一个方法,但它返回的也是一个File对象。如果我有一个File对象了,那么我还干嘛去用这个方法再返回一个File对象呢?其实getXXXFile()方法是为了方便程序员的工作。
比如:当前路径是 C:\abc\123 并且该目录下有一个 hello.txt 文件。那么我要得到该文件的File对象,你会怎么写?那不就是直接写相对路径:
File file = new File("hello.txt");那就是啊。但你写的是相对路径,不算是规范的一种写法,最好还是将File中的路径换成绝对路径。这时你就会用getXXXFile()这个方法了。
file = file.getCanonicalFile();其实getXXXFile()方法只是将File对象中的路径属性由相对路径换成绝对路径而已。
想想如果没有getXXXFile()方法,那么我们要得到一个File路径属性为绝对路径的File对象要怎么做?要不就直接在声明File对象的时候敲入冗长的路径。要不就输入相对路径由getCanonicalPath得到File的绝对路径名,然后再构造。要不然就直接再调用一次getXXXFile()方法。如果让你选择,你会选哪个呢?
总结:getXXXFile()方法的作用纯粹就是方便操作,仅此而已。
另外:System.getProperty()中的字符串参数如下: System.getProperty()参数大全
二、关于获取当前路径
在Java中,如果我们要获取当前路径,有两种方法。
第一种,通过System.getProperty("user.dir")方法:
//用System得到当前目录public static void printCurDirBS()//print Current Directory By System.getProperty{System.out.println("Current Directory By System:" + System.getProperty("user.dir"));}
第二种,通过File:
//使用File的方式打印当前目录public static void printCurDirBF(){File file = new File(".");try{System.out.println("Current Directory By File:" + file.getCanonicalPath());} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}其实前面说到getCanonicalXXX 和 getAbsoluteXXX 方法。其实它们在大多数时候是没有区别的,所以选择哪个使用都差不多。但是在这里,因为File对象的路径使用了".",所以必须用 getCanonicalXXX 方法。所以我们也就不难得知什么时候该用Canonical,什么时候用Absolute了。
就本例而言,我想说的是:System.getProperty("user.dir") 与 File file = new File(".") 在CMD中返回当前路径,而在Eclipse或MyEclipse中则是返回项目的根目录。比如我的项目路径是:E:\Workspace\TomcatProject,我的Java文件在:E:\Workspace\TomcatProject\src\com\test\FileTest.java 里,那么我在ME里运行时,它们都在将项目根目录作为『当前路径』的。这点需要清楚。但是再问一句,为什么是这样呢?我还不是很清楚,有知道的同学可以指点一下。
三、关于setReadable()方法
在Java中,我将一个文本文件设置为不可读,即执行以下语句:
public static void setFileAttribute(File file, File copyFile) throws IOException{file.setReadable(false, true); //第二个参数为true表示此操作对所有人有效,为false表示此操作只对文件拥有者有效file.setExecutable(false, true);file.setWritable(false, true);System.out.println(file.canRead());System.out.println(file.canWrite());System.out.println(file.canExecute());System.out.println("测试是否真的可读");FileReader fr = new FileReader(file);int c;while((c = fr.read())!= -1){System.out.print((char)c);}}但是执行之后canRead()依旧为true,并且也可以读出数据,这点我至今未弄懂!0 0
- Java File类库
- java file
- java File
- java file
- Java-File
- java file
- Java File
- java.File
- Java File
- Java.File
- Java-File
- Java File
- Java File
- Java File
- JAVA-File
- java-File
- java-File
- Java -- File
- 数据库增加字段注意事项
- SQLite 体系结构和内核
- 初学者如何理解网络协议(二)
- C语音简单计时器
- EBS默认密码
- Java File类库
- Android:利用Google GeoCoding API替代Geocoder & 解决地址语言问题 (转)
- python中的深拷贝与浅拷贝解析
- Javascript中,多态举例
- Failed to initialize Monitor Thread: Unable to establish loopback connection
- 西部数码 linux主机 wordpress 重写规则httpd.conf
- 黑马程序员_正则表达式
- ASP.NET 2.0 回发或回调参数无效
- RakNet官方文档学习笔记