十一.文件与异常
java操作文件,使用的类File类。
1.文件的分类
1.真实文件
2.目录文件
3.虚拟文件
2.文件名和文件全名的区别
文件名:名字+扩展名
文件全名:路径+名字+扩展名。
3.相对路径和绝对路径
相对路径:已运行的根目录作为起点,填写的路径。
绝对路径:带上一个盘符的路径。
尽量使用相对路径。
4.不同系统的目录分隔符和路径分隔符是什么?
windows:"/",";"
linux:"\",":"
File类提供了统一的属性用来获取目录分隔符和路径分隔符。
5.使用File类来创建文件或目录,删除文件和获取文件属性。
创建文件对象的方式:
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
文件操作的方法:
boolean createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
boolean delete()
删除此抽象路径名表示的文件或目录。
void deleteOnExit()
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
boolean exists()
测试此抽象路径名表示的文件或目录是否存在。
String getName()
返回由此抽象路径名表示的文件或目录的名称。
boolean isAbsolute()
测试此抽象路径名是否为绝对路径名。
boolean isDirectory()
测试此抽象路径名表示的文件是否是一个目录。
boolean isFile()
测试此抽象路径名表示的文件是否是一个标准文件。
boolean isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件。
long length()
返回由此抽象路径名表示的文件的长度。
File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
static File[] listRoots()
列出可用的文件系统根。
boolean mkdir()
创建此抽象路径名指定的目录。
boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
实例:创建、删除文件和统计磁盘个数
TestFile
6.如何查找所有磁盘的文件呢?
TestFile
要有界面
1.可以选择查找的目录
2.可以输入要查找的文件名
3.显示文件的文件全名
7.什么是异常?
程序在运行过程中,意外终止执行。
8.常见的异常类
Exception类的子类
异常:
1.运行时异常 RuntimeException(隐式异常)
2.强制异常
9.异常的处理
try{}//表示用来捕获{}中的代码是否会发生异常,如果发生异常,则交给catch语句进行处理。
catch(){}//()中表示的异常的类型,{}表示异常的处理。
finally{}//不管是否发生异常,都将执行{}中的代码。
throws//向外抛出异常(强制异常就是用throws引发的)
throw//用来定义新的异常的关键字(1.用try{}catch(){}进行处理;2.用throws往外抛异常)
例:
TestFile.java
package cn.netjava.lesson15_2;
import java.io.File;
import java.io.IOException;
public class TestFile {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
TestFile tf = new TestFile();
tf.newOnDeleteFile("src/cn/netjava/lesson1/测试.txt");
tf.print();
}
File[] list = File.listRoots();
/**
* 获取到系统所有的盘符
*/
public void print(){
//定义一个File数组对象,使用File类的listRoots方法获取所有的磁盘
//= File.listRoots();
int count = 0;
System.out.println("list="+list);
//循环遍历下
for(int i=0;i<list.length;i++){
System.out.println(list[i].getAbsolutePath());
//调用统计的方法
count += searchFile(list[i]);
}
System.out.println("文件总数:"+count);
}
/**
* 查找磁盘中所有文件的总数
*/
public int searchFile(File file){
//定义变量
int count = 0;
//获取File对象下是否还有目录或者文件
File [] list = file.listFiles();
//判断数组是否为null或者长度为0
if(null == list || list.length == 0){
return 0;
}
//循环数组
for(int i=0;i<list.length;i++){
//获取文件对象
File f = list[i];
//判断f是否是目录
if(f.isDirectory()){
//进行递归调用
count += searchFile(f);
}
//判断是否是文件
if(f.isFile()){
count++;
}
}
//返回文件总数
return count;
}
/**
* 定义一个方法,用来创建或者删除文件的
* @throws Exception
*/
public void newOnDeleteFile(String path) throws Exception{
//实例化一个文件对象
File f = new File(path);//只是创建了一个文件对象而已,还未操作这个文件,所以在此时是没有指向文件的。
//开始操作
if(f.exists()){
//表示文件存在,删除他
//f.delete();
System.out.println("你准备删除:"+f.getName()+"文件吗?");
throw new Exception("禁止删除该文件!");
}else{
try {
f.createNewFile();//表示文件不存在,则创建
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("你创建了:"+f.getName()+"文件");
}
}
}