File类是什么?Stream又是什么?
当我们再Java种需要针对一个文件进行操作的时候,我们就需要使用File类。Java标准库中给我们了很多关于文件的操作,这里我列举几个最常使用的:
1.File类的常用方法
System.out.println(file1.getAbsolutePath());//获取绝对路径
System.out.println(file1.getPath()); //获取路径
System.out.println(file1.getName()); //获取名字
System.out.println(file1.getParent()); //获取上层文件目录,若无,返回null
System.out.println(file1.length()); //获取文件长度(字节数),不能获取目录的长度
System.out.println(file1.lastModified()); //获取最后一次的修改时间,返回值为毫秒数
public boolean isDirectory():判断是否是文件目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
创建硬盘中对应的文件或文件目录:
public boolean creatNewFile():创建文件。若文件存在,则不创建,返回false
public boolean mkdir():创建文件目录.如果目录存在,则不创建
public boolean mkdirs():创建文件目录,如果上层文件目录不存在,一并创建
删除磁盘中的文件或文件目录
public boolean delete():删除文件或文件夹
2. 如何创建一个File类的实例?
2.1 绝对路径and相对路径
在介绍创建File类之前,我们先需要知道一个文件的<绝对路径和相对路径>
绝对路径:包含了盘符(通常为D:\)在内的文件及其目录的路径。
相对路径:相对于某个路径节点来知名的路径。
用下面这个万能猫猫.jpg文件举例的话它的绝对路径就是D:\学习资料\JAVA代码\万能猫猫.jpg。 相对路径: 相对于学习资料文件夹就是 ./JAVA代码/万能猫猫.jpg
注意此处 正斜杠/ 反斜杠\ 都可以作为文件目录标识符,但是推荐使用/。因为\在C语言中跟某些字母搭配会有变为转义字符的风险。 同样,文件夹名称不要用汉语,这里是因为笔者买电脑的时候不知道这些,为后来的学习编程还营造了不少麻烦。
2.2创建一个File类实例
直接输入对应字符串来表示文件位置
File file1=new File("hello.txt"); //相对于当前module
File file2=new File("D:/学习资料/JAVA代码/java-test/hello.txt"); //绝对路径
使用字符串来表示文件目录
File file3=new File("D:/学习资料/JAVA代码/java-test", "hello.txt");//文件目录
在某一文件目录下的某一文件
File file4=new File(file3,"hi.txt"); //相当于在java-test下面的一个文件
3. InputStream and OutputStream 的使用
3.1 介绍
在Java中,按照数据单位的不同,将文件分为字节流数据和字符流数据,字节流默认不使用缓冲区;字符流使用缓冲区。. 字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。
根据流向的不同(相对于CPU,从CPU往外的操作叫输出),分为输入流(In~)和输出流(Out~)。
3.2 使用
这两个流都属于抽象基类,我们常常使用他们的实现类(FileInputStream 和FileOutputStream)来进行对象的实例化。
创建文件:
File file = new File(“hello.txt”);
创建流
FileInputStream f = new FileInputStream(file);
读取数据(写文件关键字为write,用法基本一致)
byte[] buffer = new byte[5];
int len; //记录每次读取的字节个数
while ((len = f.read(buffer)) != -1)
{
String str=new String(buffer,0,len);
System.out.print(str);
}
此处read操作每次读取文件中的一个字节,返回-1的时候表示读完了这个文件。
关闭资源
if (f!=null){
f.close();
}
但是此处流资源不一定能够被关闭,如果在读操作的时候返回了return;则这一步会被跳过,我们可以使用finally来确保。同时需要注意,文件操作会报IO异常,我们必须记得处理。