java io流文件损坏_JavaSE——IO流(一)异常,File文件类

IO流的概述

1.概念

IO流是用来处理设备之间的数据传输,也就是上传文件和下载文件。

2.为什么要先讲解异常和File类?

(1)File表示的是IO流将来要操作的文件,所以必须学习File类

(2)而常见操作文件无非就是文件上传和文件下载,在这个操作过程中可能出现问题,出现问题后,我们就需要对对应的代码进行处理,所以要学习异常。

一.异常

1.概述

异常就是Java程序在运行过程中出现的错误。

2.分类

(1)error:严重问题,一般不予处理,比如内存溢出。

(2)Exception:非严重问题,可以解决的问题。

①编译时异常:非RuntimeException

②运行时异常:RuntimeException

3.JVM默认处理异常的方式

main函数收到这个问题时,有两种处理方式:

(1)自己将该问题处理,然后继续运行

(2)自己没有针对的处理方式,只能交给调用main方法的JVM来处理,JVM有一个默认的异常处理机制,就是将该异常进行处理,并将该异常的名称,异常的信息,异常出现的位置打印在了控制台上,同时将该程序停止运行。

//1/0异常

package com.westmo1.demo7;

public class MyDemo4 {

public static void main(String[] args) {

int a=1;

int b=0;

System.out.println(a/b);

}

}

//Exception in thread "main" java.lang.ArithmeticException: / by zero

at com.westmo1.demo7.MyDemo4.main(MyDemo4.java:7)

4.异常处理(try…catch…finally)

(1)基本格式

try {

可能出现问题的代码 ;

}catch(异常名 变量名){

针对问题的处理 ;

}finally{

释放资源;

}

(2)案例演示

package com.westmo1.demo7;

public class MyDemo4 {

public static void main(String[] args) {

int a=1,b=0;

int[] arr={12,12};

arr=null;

//对于try里面遇到的可能出现的异常,我们能明确的尽量明确,去捕获不要拿一个最大的异常,捕获了之,为什么?

//因为你如果用一个最大的异常捕获,那么出现异常,肯定可以捕获住,但是你不知道这是何种具体的异常。

try{

System.out.println(arr.length);

System.out.println(a/b);

}catch (ArithmeticException e){

System.out.println("除数为0了");

}catch (NullPointerException e){

System.out.println("空指针异常");

}catch (Exception e){

System.out.println("其他异常");

}

System.out.println("下面的代码");

}

}

5.编译期异常和运行期异常的区别

(1)概念

Java中的异常被分为两大类:编译时异常和运行时异常,所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常都是编译时异常。

编译时异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译。

运行时异常:无需显示处理,也可以和编译时异常一样处理。

(2)案例演示

//try...catch方式

package com.westmo1.demo8;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class MyDemo1 {

public static void main(String[] args) {

String str="2020-12-12";

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy--mm-dd");

try {

Date parse = simpleDateFormat.parse(str);

System.out.println(parse);

} catch (ParseException e) {

System.out.print("解析异常");

}finally {//异常有无发生,都会执行finally中的代码

System.out.println("善后工作");

}

System.out.println("后面的代码");

}

}

//throws方式处理,把出现的问题暴露出来让调用者去处理

package com.westmo1.demo8;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class MyDemo1 {

public static void main(String[] args) throws ParseException {

String str = "2020-12-12";

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");

Date parse = simpleDateFormat.parse(str);

System.out.println(parse);

}

}

6.异常的基类(Throwable的几个产常见方法)

getMessage():获取异常信息,返回字符串。

toString():获取异常类名和异常信息,返回字符串。

printStackTrace(): 获取异常类名和异常信息,以及异常出现在程序中的位置。

7.throw和throws的区别

(1)throw概述:在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。

(2)区别

throws:用在方法声明后面,跟的是异常类名,可以 跟多个异常类名,用逗号隔开。它表示抛出异常,将异常抛给了调用者,由调用者处理,并且throws只是表示异常的一种可能性,并不一定会发生这些异常。

throw:它是用在方法体内,跟的是异常对象名,只能是一个异常对象名,这个对象名可以是编译期异常对象也可以是运行期异常对象。它抛出的异常是由方法体内的语句处理,并且执行throw则一定抛出了某种异常。

package com.westmo1.demo8;

import java.util.Scanner;

public class MyDemo5 {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.println("输入两个数");

int a = scanner.nextInt();

int b = scanner.nextInt();

test1(a,b);

}

private static void test1(int a, int b) {

if (b==0) {

throw new ArithmeticException("除数为0了");

}else{

System.out.println(a/b);

}

}

}

8.finally关键字以及与final,finalize的区别

(1)finally:是Java保证代码一定要执行的一种机制,我们可以使用try-catch-finally来进行处理异常的操作。处理异常时,不关异常有没有发生,finally中的代码都会执行。

(2)final:可以用来修饰方法,类,变量。修饰方法该方法不能被重写,修饰类该类不能被继承,修饰变量该变量不能被修改。

(3)finalize:是基础类Object的一个方法,是保证对象在被垃圾收集前完成特定资源回收。但是现在已经不推荐使用。

9.自定义异常

package com.westmo1.demo8;

import java.util.Scanner;

public class MyDemo6 {

public static void main(String[] args) {

//成绩不合法异常 0-100 输入别的就是异常,这个异常RuntimeException中没有

Scanner scanner = new Scanner(System.in);

System.out.println("输入成绩");

int i = scanner.nextInt();

Score(i);

}

private static void Score(int i) {

if(i>=0&&i<=100){

System.out.println("成绩合格");

}else{

throw new ScoreException("成绩不合法");

}

}

//x需要将我们写的这个类纳入到Java的异常体系中

static class ScoreException extends RuntimeException{

public ScoreException(String s) {

super(s);

}

public void ScoreException(String string){

}

}

}

二.File类

1.概述

我们在使用IO流进行数据传输时,这些数据在我们电脑上都是以文件或文件夹的形式来体现的。Java中就给我们提供了一个File类来描述文件或文件夹。

2.使用

(1)构造方法

File(String pathname):根据一个路径得到File对象

File(String parent, String child):根据一个目录和一个子文件/目录得到File对象

File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

(2)创建功能

public boolean createNewFile():创建一个新的文件 如果存在这样的文件,就不创建了

public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了 注意这个方法只能创建单层目录 如果创建多层目录得一层一层创建

public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来 可以创建多层目录 当然也可以创建单层目录

相对路径:没有带盘符的路径 Java中相对路径,指的是Java工程的根目录

绝对路径:带有盘符的路径

(3)删除功能

public boolean delete():删除文件或者文件夹 ,如果这个文件夹中有文件,就不能删除

(4)重命名功能

public boolean renameTo(File dest):把文件重命名为指定的文件路径

(5)判断功能

public boolean isDirectory():判断是否是目录

public boolean isFile():判断是否是文件

public boolean exists():判断是否存在

public boolean canRead():判断是否可读

public boolean canWrite():判断是否可写

public boolean isHidden():判断是否隐藏

public boolean isAbsolute(); 判断是否使用的是绝对路径

(6)获取功能

public String getAbsolutePath():获取绝对路径

public String getPath():获取相对路径

public String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。

public File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。

public long getTotalSpace() 返回此抽象路径名指定的分区大小。 返回总容量 单位字节

public long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量 单位字节

public String getName():获取名称

public long length():获取长度。字节数

public long lastModified():获取最后一次的修改时间,毫秒值

public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

3.文件名称过滤器

public String[] list(FilenameFilter filter)

public File[] listFiles(FilenameFilter filter)

3.案例演示

(1)删除一个多级文件夹

package com.westmo1.demo10;

import java.io.File;

public class MyDemo1 {

public static void main(String[] args) {

File file = new File("F:\\123");

Delete(file);

System.out.println("删除完成");

}

private static void Delete(File file) {

File[] files = file.listFiles();//或取file目录下所有文件或文件夹的File数组

for (File file1 : files) {

if (file1.isFile()) {//判断是否是文件

file1.delete();

}else{

Delete(file1);//如果不是,递归

}

}

file.delete();

}

}

(2)判断指定目录下是否有后缀名为.jpg的文件,有就输出文件名称。

①:File类实现

package com.westmo1.demo10;

import java.io.File;

public class MyDemo2 {

public static void main(String[] args) {

File file = new File("E:\\123");

Show(file);

}

private static void Show(File file) {

File[] files = file.listFiles();

for (File file1 : files) {

if (file1.isFile()){

if(file1.getName().endsWith(".jpg")) {

System.out.println(file1.getName());

}

}else{

Show(file1);

}

}

}

}

②文件过滤器实现

package com.westmo1.demo10;

import java.io.File;

import java.io.FilenameFilter;

public class MyDemo3 {

public static void main(String[] args) {

File file = new File("E:\\123");

File[] files = file.listFiles(new FilenameFilter() {

@Override

public boolean accept(File dir, String name) {

File file1 = new File(dir, name);

if (file1.isFile() && file1.getName().endsWith(".jpg")) {

return true;

} else {

return false;

}

}

});

for (File file1 : files) {

System.out.println(file1.getName());

}

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值