JAVA 基础知识整理-15 编译异常,运行异常,File类

1.异常

常见编译期异常(直接继承Exception)

	  1.ClassNotFoundException(类找不到异常)

      2.FileNotFoundException(编译文件夹中找不到)

      3.SQLException :提供有关数据库访问错误或其他错误的信息的异常。( 比如SQL语句写错,访问的表不存在,连接数据库失败等等)

      4.IOexception:IO流异常。一般在读写数据的时候会出现这种问题。

      5.EOFException:当输入过程中意外到达文件或流的末尾时,抛出此异常。

常见运行期异常(继承Exception的子类RuntimeException)

	  1.NullPointerException(空指针异常)

      2.ArithmeticException(运算非法异常)

      3.IndexOutOfBoundsException(数组越界异常)

      4.ClassCastException(类转换异常)

      5.ArrayStoreException(数据存储异常,操作数组时类型不一致)

      6.BufferOverflowException(字节溢出异常—IO流操作)

异常的抛出throws:
格式: throws 异常类名(这个格式必须跟在方法的括号后面。)
注意:尽量不要在main方法上抛出异常

throws 和 throw的区别:
throws:
1)用在方法声明后面,跟的是异常类名
2)可以跟多个异常类名,用逗号隔开
3)表示抛出异常,由该方法的调用者来处理
4)表示一种异常的可能性,并不是一定会发生异常

throw:
1)用在方法体内,跟的是异常对象名
2)只能抛出一个异常对象名
3)表示抛出异常,由方法体内的语句处理
4)表示抛出异常,执行throw则一定抛出某种异常。

异常在继承中的注意事项:

1)子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
2)如果父类抛出多个异常,子类重写父类时,只能抛出相同的异常或者是他的子类,子类不能抛出父类没有的异常。
3)如果被重写的方法没有异常抛出,那么子类绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws。
在这里插入图片描述
在这里插入图片描述

try…catch…finally(catch中有return语句的情况):

finally 是最后一定会执行的语句,那么如果在catch里面出现return要怎么执行呢。
原代码:

public class TryCatchDemo {
	public static void main(String[] args) {
		System.out.println(tryCatch());
	}
	
	public static int tryCatch(){
		int a =2;
		int b=0;
		int c= 20;
		try {
			System.out.println(a/b);
			c= 30;
			return c;
		} catch (ArithmeticException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			c = 40;
			return c;
		}finally{
			c = 50;
			//return c;
		}
	}
}
结果:
40
java.lang.ArithmeticException: / by zero
	at testdemo.TryCatchDemo.tryCatch(TryCatchDemo.java:18)
	at testdemo.TryCatchDemo.main(TryCatchDemo.java:10)

反编译后:

扫描二维码关注公众号,回复: 10847914 查看本文章
package testdemo;

import java.io.PrintStream;

public class TryCatchDemo
{

	public TryCatchDemo()
	{
	}

	public static void main(String args[])
	{
		System.out.println(tryCatch());
	}

	public static int tryCatch()
	{
		int a;
		int b;
		a = 2;
		b = 0;
		int c = 20;
		int i;
		System.out.println(a / b);
		int c = 30;
		i = c;
		int c = 50;
		return i;
		ArithmeticException e;
		e;
		e.printStackTrace();
		int c = 40;
		i = c;
		int c = 50;
		return i;
		Exception exception;
		exception;
		int c = 50;
		throw exception;
	}
}

在这里插入图片描述jvm自上而下运行到1处时发现异常,跳过try里面之后的代码没有被执行,而向下继续走,走过2和3,走到4时发现后面是finally语句,又向下走完finally里的语句,最后回到4处的return,而通过反编译可以看出4处反的其实不是c,而是另一个在c=40时,记录的c的变量i,所以最后返回的结果是40.

2. File

用户界面和操作系统使用依赖于系统的路径名字符串命名文件和目录。 这个类提供了一个抽象的,独立于系统的层次化路径名的视图。

构造方法:
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child) //File(路径名, 文件名)
从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri)
通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
以下三种创建方式效果一样:
1)File f= new File(“c:\d”, “a.xxx”)
2)File f= new File(“c:\d\a.xxx”)
3)File f1 = new File(“c:\d”)
File f= new File(f1,“a.xxx”)

常用方法:
boolean canExecute()

判断文件是否可执行
boolean canRead()
判断文件是否为可读状态
boolean canWrite()
判断文件是否可写
int compareTo(File pathname)
比较两个抽象的路径名字典。
boolean createNewFile()
如果创建的File对象实际不存在, 那么就创建这个文件
static File createTempFile(String prefix, String suffix)
在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。
static File createTempFile(String prefix, String suffix, File directory)
在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
boolean delete()
删除由此抽象路径名表示的文件或目录。
void deleteOnExit()
请求在虚拟机终止时删除由此抽象路径名表示的文件或目录。
boolean equals(Object obj)
测试此抽象路径名与给定对象的相等性。
boolean exists()
测试此抽象路径名表示的文件或目录是否存在。
File getAbsoluteFile()
返回此抽象路径名的绝对形式。
String getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。(不管存不存在都会返回它的绝对路径形式)
File getCanonicalFile()
返回此抽象路径名的规范形式。
String getCanonicalPath()
返回此抽象路径名的规范路径名字符串。
long getFreeSpace()
返回分区未分配的字节数 named此抽象路径名。
String getName()
返回由此抽象路径名表示的文件或目录的名称。
String getParent()
返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。
File getParentFile()
返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。
String getPath()
将此抽象路径名转换为路径名字符串。
long getTotalSpace()
通过此抽象路径名返回分区 named的大小。
long getUsableSpace()
返回上的分区提供给该虚拟机的字节数 named此抽象路径名。
int hashCode()
计算此抽象路径名的哈希码。
boolean isAbsolute()
测试这个抽象路径名是否是绝对的。
boolean isDirectory()
测试此抽象路径名表示的文件是否为目录。
boolean isFile()
判断是否是文件。如果是目录就返回false,是文件就返回true
boolean isHidden()
判断是否为隐藏文件
long lastModified()
获取最后一次修改时间
long length()
获取文件对象的字节数
String[] list()
获取指定目录下的所有文件或文件夹的名称数组。
String[] list(FilenameFilter filter)
返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles()
获取指定目录下的所有文件或者文件夹的File数组。
File[] listFiles(FileFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[] listFiles(FilenameFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
static File[] listRoots()
列出可用的文件系统根。
boolean mkdir()
创建文件夹

boolean mkdirs()
创建多级文件夹

boolean renameTo(File dest)
重命名由此抽象路径名表示的文件。
注:
如果路径名相同,就是改名
如果路径名不同就是剪切

File f = new File("a.txt");
File f1 = new File("b.txt");
		f.renameTo(f1);//将“a.txt”,改为“b.txt”

boolean setExecutable(boolean executable)
为此抽象路径名设置所有者的执行权限的便利方法。
boolean setExecutable(boolean executable, boolean ownerOnly)
设置该抽象路径名的所有者或每个人的执行权限。
boolean setLastModified(long time)
设置由此抽象路径名命名的文件或目录的最后修改时间。
boolean setReadable(boolean readable)
一种方便的方法来设置所有者对此抽象路径名的读取权限。
boolean setReadable(boolean readable, boolean ownerOnly)
设置此抽象路径名的所有者或每个人的读取权限。
boolean setReadOnly()
标记由此抽象路径名命名的文件或目录,以便只允许读取操作。
boolean setWritable(boolean writable)
一种方便的方法来设置所有者对此抽象路径名的写入权限。
boolean setWritable(boolean writable, boolean ownerOnly)
设置此抽象路径名的所有者或每个人的写入权限。
Path toPath()
返回从此抽象路径构造的java.nio.file.Path对象。
String toString()
返回此抽象路径名的路径名字符串。

输出指定目录下以.jpg或者以.JPG 结尾的所有文件名案例:

在这里插入图片描述

public static void main(String[] args) {
		
		File f= new File("D:\\2ND SHOW\\1ST\\");
		printPdfFileName1(f);
	}
	
	public static void printPdfFileName(String path){
		File f = new File(path);
		File[] filelist = f.listFiles();
		for(File file: filelist){
			//System.out.println(file.isFile());
			if(file.isFile()==true){
				String filename = file.getName();
				if(filename.endsWith(".jpg")){
					System.out.println(filename+"   ");
				}
			}
		}
		
	}
	
	public static void printPdfFileName1(File f){
		File[] filelist = f.listFiles();
		for(File file: filelist){
			if(file.isFile()==true){
				String filename = file.getName();
				if(filename.endsWith(".jpg")||filename.endsWith(".JPG")){
					System.out.println(filename);
				}
			}else{
				printPdfFileName1(file);
			}
		}
	}

使用FileNameFiltter 文件名过滤器输出所有以.jpg或者.JPG结尾的文件名:

public static void main(String[] args) {
		File f= new File("D:\\2ND SHOW\\1ST\\");
		printJpgFileNameWithFileNameFilter(f);
	}
	
	public static void printJpgFileNameWithFileNameFilter(File f){
		File[] filelist = f.listFiles(new FilenameFilter (){			
			@Override
			public boolean accept(File dir, String name) {
				File f = new File(dir,name);
				boolean flag1= f.isFile();
				boolean flag2 = f.getName().endsWith(".jpg")||f.getName().endsWith(".JPG");
				return !flag1|flag2;
			}			
		});
		for(File file:filelist ){
			if(file.isFile()==true){
				System.out.println(file.getName());
			}else{
				printJpgFileNameWithFileNameFilter(file);
			}
		}
	}

批量修改文件名:

在这里插入代码片
发布了55 篇原创文章 · 获赞 0 · 访问量 2068

猜你喜欢

转载自blog.csdn.net/KathyLJQ/article/details/104982498