java基础知识点复习三——异常机制和File类

一、异常机制和File类

(一)、异常机制

1、概念
异常就是在Java语言中主要指程序执行中发生的不正常情况。java.lang.Throwable类是Java语言中错误(Error)和异常(Exception)的超类。
(1)其中Error类主要用于描述Java虚拟机无法解决的严重错误,通常无法编码解决,如:JVM挂掉了等。
(2)其中Exception类主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决,如:0作为除数等。
2、异常的分类
java.lang.Exception类是所有异常的超类,主要分为以下两种:
(1)RuntimeException - 运行时异常,也叫作非检测性异常,其中RuntimeException类的主要子类:
ArithmeticException类 - 算术异常
ArrayIndexOutOfBoundsException类 - 数组下标越界异常
NullPointerException - 空指针异常
ClassCastException - 类型转换异常
NumberFormatException - 数字格式异常
(2)IOException和其它异常 - 其它异常,也叫作检测性异常,所谓检测性异常就是指在编译阶段都能被编译器检测出来的异常。
注意:
当程序执行过程中发生异常但又没有手动处理时,则由Java虚拟机采用默认方式处理异常,而默认
处理方式就是:打印异常的名称、异常发生的原因、异常发生的位置以及终止程序。
3、异常的捕获
执行流程:
try {
编写可能发生异常的代码;

}catch(Exception ex) {
编写针对该类异常的处理代码;
}finally {
编写无论是否发生异常都要执行的代码;
}
注:a.当需要编写多个catch分支时,切记小类型应该放在大类型的前面;
b.懒人的写法:
catch(Exception e) {}
c.finally通常用于进行善后处理,如:关闭已经打开的文件等。

public calss ExceptionTest{
	public static void main(String[] args) {
	//最终返回值为2
		try{
			int[] arr = new int[5]; 
			System.out.println(arr[5]);
			return 0;
		}catch(ArrayIndexOutOfBoundsException e){
			e.printStackTrace();
			return 1;
		}finally{
			return 2;
		}
	}
}

4、异常的抛出
访问权限 返回值类型 方法名称(形参列表) throws 异常类型1,异常类型2,…{ 方法体; }
如: public void show() throws IOException{}

(二)、File类

1、java.io.File类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息,如:大小等。
2、常用的方法

方法声明功能概述
File(String pathname)根据参数指定的路径名来构造对象
File(String parent, String child)根据参数指定的父路径和子路径信息构造对象
File(File parent, String child)根据参数指定的父抽象路径和子路径信息构造对象
boolean exists()测试此抽象路径名表示的文件或目录是否存在
String getName()用于获取文件的名称
long length()返回由此抽象路径名表示的文件的长度
long lastModified()用于获取文件的最后一次修改时间
String getAbsolutePath()用于获取绝对路径信息
boolean delete()用于删除文件,当删除目录时要求是空目录
boolean createNewFile()用于创建新的空文件
boolean mkdir()用于创建目录
boolean mkdirs()用于创建多级目录
File[] listFiles()获取该目录下的所有内容
boolean isFile()判断是否为文件
boolean isDirectory()判断是否为目录
File[] listFiles(FileFilter filter)获取目录下满足筛选器的所有内容

3、

	public calss FileTest{
	  public static void main(String[] args) throws IOException{
		File file = new File("d:/a.txt");
		if(file.exists()){
			System.out.println("文件的名称为"+file.getName());
			System.out.println("文件的长度为"+file.length());
			//得到的时间是long型的毫秒数
			System.out.println("文件的最后一次修改时间为"+file.lastModified());
			System.out.println("文件的绝对路径为"+file.getAbsolutePath());
			//绝对路径:根目录开始的路径信息:如以d:/ c:/开始的
			//相对路径:以当前目录所在位置开始的路径信息,如../
			System.out.println(file.delete()?"文件删除成功":"文件删除失败");
		}else{
			System.out.println(file.createNewFile()?"文件创建成功":"文件创建失败");
		}
		System.out.println("--------------------------");
		//获取指定目录以及子目录中的内容并打印
		File[] fileArrays = file.listFiles();
		//遍历数组
		for(File f : fileArrays){
			String name = f.getName();
			//判断是否为文件,若是则直接打印文件名称
			if(f.isFile()){
				System.out.println(name);
			}
			//判断是否是目录,若是则将目录名称用【】括起来
			if(f.isDirectory()){
				System.out.println("【"+name+"】");
				//用递归可以获取子目录中的文件,将这个循环方法抽成一个方法
			}
		}
		
	}
}

二、IO流

(一)、IO流的概念及分类

1、Io流:IO就是Input和Output的简写,也就是输入和输出的含义。IO流就是指读写数据时像流水一样从一端流到另外一端,因此得名为“流"。
2、Io流的基本分类

  • 按照读写数据的基本单位不同,分为 字节流 和 字符流。
    其中字节流主要指以字节为单位进行数据读写的流,可以读写任意类型的文件。
    其中字符流主要指以字符(2个字节)为单位进行数据读写的流,只能读写文本文件,内容只能为文字,不能是图片,音频,视频等,因为像一个汉字占两个字节,用字节流只能一次读半个汉字,翻译出来容易乱码。
  • 按照读写数据的方向不同,分为 输入流 和 输出流(站在程序的角度)。
    其中输入流主要指从文件中读取数据内容输入到程序中,也就是读文件。
    其中输出流主要指将程序中的数据内容输出到文件中,也就是写文件。
  • 按照流的角色不同分为节点流和处理流。
    其中节点流主要指直接和输入输出源对接的流。
    其中处理流主要指需要建立在节点流的基础之上的流。

(二)、 FileWriter类——字符输出流

1、java.io.FileWriter类主要用于将文本内容写入到文本文件。
2、常用方法

方法声明功能介绍
FileWriter(String fileName)根据参数指定的文件名构造对象
FileWriter(String fileName, booleanappend)以追加的方式根据参数指定的文件名来构造对象
void write(int c)写入单个字符
void write(char[] cbuf, int off, int len)将指定字符数组中从偏移量off开始的len个字符写入此文件输出流
void write(char[] cbuf)将cbuf.length个字符从指定字符数组写入此文件输出流中
void flush()刷新流
void close()关闭流对象并释放有关的资源
	public calss FileWriterTest{
	  public static void main(String[] args) throws IOException{
	  		FileWriter fw = null;
	  try{
	  		//1、构造FileWriter类型的对象与d:/a.txt文件关联
	  		//若文件不存在会自动创建空文件
	  		//若文件存在,该流会自动清空文件中的原有内容
			//FileWriter fw = new FileWriter("d:/a.txt");
			//以追加的方式根据参数指定的文件名来构造对象,不会清空原有内容
			fw = new FileWriter("d:/a.txt",true);
			//2、通过流对象写入单个字符,从上到下执行,每当写入一个字符则文件中的读写位置向后移一位
			fw.write("a");
			//将字符数组写入,可部分写入也可全部写入
			char[] cArr = new char[]{'h','m','d'};
			//fw.write(cArr,0,1); //部分写入
			fw.write(cArr);  //全部写入
			System.out.println("写入数据成功");  //ahmd
	  }catch(IOException e){
	  		e.printStackTrace();
	  }finally{
	    try{
	  		if(fw != null){
	  			//3、关闭流对象并释放有关资源
			    fw.close();
	  		}
         }catch(IOException e){
         	e.printStackTrace();
         }	
	  }
		
	}
}

(三)、 FileReader类——字符输入流

1、java.io.FileReader类主要用于从文本文件读取文本数据内容。
2、常用方法

方法声明功能介绍
FileReader(StringfileName)根据参数指定的文件名构造对象
int read()读取单个字符的数据并返回,返回-1表示读取到末尾
int read(char[] cbuf, intoffset, int length)从输入流中将最多len个字符的数据读入一个字符数组中,返回读取到的字符个数,返回-1表示读取到末尾
int read(char[] cbuf)从此输入流中将最多 cbuf.length 个字符的数据读入字符数组中,返回读取到的字符个数,返回-1表示读取到末尾
void close()关闭流对象并释放有关的资源
public calss FileReaderTest{
	  public static void main(String[] args) throws IOException{
	  		FileReader fr = null;
	  try{
	  		//1、构造FileReader类型的对象与d:/a.txt文件关联	 
			fr = new FileReader("d:/a.txt");
			/**
			//2、读取单个字符内容
			int res = 0;
			//等于-1表示读取到了末尾
			while(res = fr.read() != -1){
				System.out.println("读取数据为" + (char)res);  
			}
			**/
			//读取数据到数组
			char[] cArr = new char[5];
			int res = fr.read(cArr);
			System.out.println("获取字符的个数" + res);  
			for(char cv : cArr){
				System.out.println("读取数据为" + cv);  
			}
			
	  }catch(IOException e){
	  		e.printStackTrace();
	  }finally{
	    try{
	  		if(fr != null){
	  			//3、关闭流对象并释放有关资源
			    fr .close();
	  		}
         }catch(IOException e){
         	e.printStackTrace();
         }	
	  }
		
	}
}

拷贝文件到另外一个文件(文件字符流的拷贝)

public calss FileCopyTest{
	  public static void main(String[] args) throws IOException{
	  	  	FileReader fr = null;
	  		FileWriter fw = null;
	  try{
	  		//1、构造FileReader类型的对象与d:/a.txt文件关联	 
			fr = new FileReader("d:/a.txt");
			//构造FileWriter类型的对象与d:/b.txt文件关联
			fw = new FileWriter("d:/b.txt");
			int res = 0;
			//等于-1表示读取到了末尾
			while(res = fr.read() != -1){
				fw.write(res);
			}
			System.out.println("拷贝文件成功");  
	  }catch(IOException e){
	  		e.printStackTrace();
	  }finally{
	    try{
	  		if(fr != null || fw != null ){
	  			//3、关闭流对象并释放有关资源
	  			//先创建的后关闭,后创建的先关闭
	  			fw .close();
			    fr .close();
	  		}
         }catch(IOException e){
         	e.printStackTrace();
         }	
	  }
		
	}
}

(四)、 FileOutputStream类——字节输出流

1、java.io.FileOutputStream类主要用于将图像数据之类的原始字节流写入到输出流中。
2、常用的方法

方法声明功能介绍
FileOutputStream(String name)根据参数指定的文件名来构造对象
FileOutputStream(String name,boolean append)以追加的方式根据参数指定的文件名来构造对象
void write(int b)将指定字节写入此文件输出流
void write(byte[] b, int off, int len)将指定字节数组中从偏移量off开始的len个字节写入此文件输出流
void write(byte[] b)将 b.length 个字节从指定字节数组写入此文件输出流中
void flush()刷新此输出流并强制写出任何缓冲的输出字节
void close()关闭流对象并释放有关的资源

(五)、FileInputStream类——字节输入流

1、java.io.FileInputStream类主要用于从输入流中以字节流的方式读取图像数据等。
2、** 文件字节输出流的文件拷贝(图片拷贝)**

public calss FileInputStreamTest{
	  public static void main(String[] args) throws IOException{
	  	  	FileInputStream fis = null;
	  		FileOutputStream  fos = null;
	  try{
	  //1、构造FileReader类型的对象与d:/01 IO流框架图.png文件关联	 
			fis = new FileInputStream("d:/01 IO流框架图.png");
	 //构造FileWriter类型的对象与d:/IO流框架图.png文件关联
			fos = new FileOutputStream("d:/IO流框架图.png");
			int res = 0;
			//等于-1表示读取到了末尾
			while(res = fis.read() != -1){
				fos.write(res);
			}
			System.out.println("拷贝文件成功");  
	  }catch(IOException e){
	  		e.printStackTrace();
	  }finally{
	    try{
	  		if(fis != null || fos!= null ){
	  			//3、关闭流对象并释放有关资源
	  			//先创建的后关闭,后创建的先关闭
	  			fos .close();
			    fis.close();
	  		}
         }catch(IOException e){
         	e.printStackTrace();
         }	
	  }
		
	}
}

(六)、BufferedOutputStream类——缓冲字节输出流

1、java.io.BufferedOutputStream类主要用于描述缓冲输出流,此时不用为写入的每个字节调用底层系统。较少磁盘io的接触次数。
2、

方法声明功能介绍
BufferedOutputStream(OutputStream out)根据参数指定的引用来构造对象
BufferedOutputStream(OutputStream out, int size)根据参数指定的引用和缓冲区大来构造对象
void write(int b)写入单个字节
void write(byte[] b, int off, int len)写入字节数组中的一部分数据
void write(byte[] b)写入参数指定的整个字节数组
void flush()刷新流
void close()关闭流对象并释放有关的资源

(七)、BufferedInputStream类——缓冲字节输入流

1、java.io.BufferedInputStream类主要用于描述缓冲输入流。
2、

方法声明功能介绍
BufferedInputStream(InputStream in)根据参数指定的引用构造对象
BufferedInputStream(InputStream in, int size)根据参数指定的引用和缓冲区大小构造对象
int read()读取单个字节
int read(byte[] b, int off, int len)读取len个字节
int read(byte[] b)读取b.length个字节
void close()关闭流对象并释放有关的资源

用缓冲区拷贝文件:

public calss BufferedStreamTest{
	  public static void main(String[] args) throws IOException{
	  	  	BufferedInputStream bis = null;
	  		BufferedOutputStream bos = null;
	  try{
	  //1、构造BufferedInputStream类型的对象与d:/01 IO流框架图.mp4文件关联	 
			bis = new BufferedInputStream(new FileInputStream("d:/01 IO流框架图.mp4"));
	 //构造BufferedOutputStream类型的对象与d:/IO流框架图.mp4文件关联
			bos = new BufferedOutputStream(new FileOutputStream("d:/IO流框架图.mp4"));
			byte[] bArr = new Byte[1024]
			int res = 0;
			//等于-1表示读取到了末尾
			while(res = fis.read(bArr) != -1){
				bos.write(bArr,0,res);
			}
			System.out.println("拷贝文件成功");  
	  }catch(IOException e){
	  		e.printStackTrace();
	  }finally{
	    try{
	  		if(bis != null || bos!= null ){
	  			//3、关闭流对象并释放有关资源
	  			//先创建的后关闭,后创建的先关闭
	  			bos .close();
			    bis.close();
	  		}
         }catch(IOException e){
         	e.printStackTrace();
         }	
	  }
		
	}
}

(八)、 BufferedWriter类——缓冲区字符输出流

1、java.io.BufferedWriter类主要用于写入单个字符、字符数组以及字符串到输出流中。
2、常用方法

方法声明功能介绍
BufferedWriter(Writer out)根据参数指定的引用来构造对象
BufferedWriter(Writer out, int sz)根据参数指定的引用和缓冲区大小来构造对象
void write(int c)写入单个字符到输出流中
void write(char[] cbuf, int off, int len)将字符数组cbuf中从下标off开始的len个字符写入输出流中
void write(char[] cbuf)将字符串数组cbuf中所有内容写入输出流中
void write(String s, int off, int len)将参数s中下标从off开始的len个字符写入输出流中
void write(String str)将参数指定的字符串内容写入输出流中
void newLine()用于写入行分隔符到输出流中
void flush()刷新流
void close()关闭流对象并释放有关的资源

(九)、 BufferedReader类——缓冲区字符输入流

1、java.io.BufferedReader类用于从输入流中读取单个字符、字符数组以及字符串。
2、文件拷贝:

public calss BufferedStringCopyTest{
	  public static void main(String[] args) throws IOException{
	  	  	BufferedReader br = null;
	  		BufferedWriter bw = null;
	  try{
	  //1、构造BufferedReader类型的对象与d:/a.txt文件关联	 
			br = new BufferedReader(new FileReader("d:/a.txt"));
	 //构造BufferedWriter类型的对象与d:/b.txt文件关联
			bw = new BufferedWriter(new FileWriter("d:/b.txt"));
			
			String str = null;
			//等于null表示读取到了末尾
			while(str = br.readLine(bArr) != null){
				bw.write(str);
			}
			System.out.println("拷贝文件成功");  
	  }catch(IOException e){
	  		e.printStackTrace();
	  }finally{
	    try{
	  		if(br != null || bw!= null ){
	  			//3、关闭流对象并释放有关资源
	  			//先创建的后关闭,后创建的先关闭
	  			bw .close();
			    br.close();
	  		}
         }catch(IOException e){
         	e.printStackTrace();
         }	
	  }
		
	}
}

(十)、PrintStream类——打印流

1、java.io.PrintStream类主要用于更加方便地打印各种数据内容。
2、常用的方法

方法声明功能介绍
PrintStream(OutputStream out)根据参数指定的引用来构造对象
void print(String s)用于将参数指定的字符串内容打印出来
void println(String x)用于打印字符串后并终止该行
void flush()刷新流
void close()用于关闭输出流并释放有关的资源

(十一)、 PrintWriter类——打印流

1、java.io.OutputStreamWriter类主要用于实现从字符流到字节流的转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值