day13 异常、file类

异常

定义:就是程序出现不正常的情况。

throwable类是所有异常的超类

error:java无能为力的 ,内存不足的情况,硬件方面的问题
exception:java程序发生的问题,需要改代码处理的情况
exception又分为两种异常:
运行时的异常:runtimeException
编译时的异常:非RunTimeException

异常的默认处理方式:
如果程序出现问题:
1,将异常的名称,异常出现的原因,出现的位置打印在控制台;
2,让程序停止运行;

try …catch

格式:
try{
可能出现的代码
}catch(异常类名 变量名){}
异常的处理:
}
执行的流程:
程序从try开始执行,执行到哪里出现问题,就会跳转到catch里面
执行完毕,程序还能继续往下

public class fileinput {
	public static void main(String[] args) throws Exception {
	method();
	}
	public static void method(){
		
		try{
		int a=10;
		int b=0;
		
		System.out.println(a/b);
		}catch(ArithmeticException e){
			e.printStackTrace();
		}
		
	}
	
/*
    编译时异常,当发生编译时异常,编译器会有红色波浪线标示代码,
    可以用try catch处理,
    也可以用throw抛出
     */
    private static void bianyiException()
    {
        try
        {
            String s="2020-10-16";
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
            System.out.println(sdf.parse(s));
        }catch (ParseException e){
            System.out.println(e);
        }
    }
/*
运行时异常,不影响代码的编写,
但是运行时会报错,
发现报错后应该处理这类异常
 */
private static void runException()
{
    try
    {
        int a=10;
        int b=0;
        System.out.println(a/b);
    }catch (ArithmeticException e){
        System.out.println(e);
    }
}

throws

//用throws来处理异常
    private static void throwsTest() throws ParseException
    {
        String s="2020-10-16";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(sdf.parse(s));
    }

file类

文件和目录路径的抽象表现形式

创建文件目录

	File f1=new File("e:\\b.txt");
	File f2=new File("d:\\aa","b.txt");
	File f3=new File("d:\\aa");
	File f4=new File(f3,"b.txt");
	File f5=new File("d:\\aa\\cc");
	//创建文件
	f1.createNewFile();
	//创建单层目录
	f3.mkdir();
	//创建多层目录
	f5.mkdirs();

删除文件和目录

f1.delete();//删除文件
f3.delete();//删除目录,注意如果目录底下有文件,必须先删除文件,在进行目录的删除

file类的判断和获取功能

System.out.println(f1.isFile());//是否是文件
System.out.println(f3.isDirectory());//是否是目录
System.out.println(f1.getAbsolutePath());//获取绝对目录
System.out.println(f1.getName());//获取文件名称
System.out.println(f1.getPath());//获取文件路径

IO流

常见应用:
文件复制
文件下载
文件上传

io流的分类
输入流------读取数据的过程
输出流------写入数据的过程
按照数据类型分:
字符流----人类可以读懂的
字节流----机器可以读懂的数据

字节流写数据(写文件)fileoutputstream

写文件,得抛出异常

public class fileDome {
	public static void main(String[] args) throws IOException  {	
	//创建字节输出流对象
	FileOutputStream fos=new FileOutputStream("aaa.txt");
	
	//一次写一个字符
	fos.write(66);
	
	//一次写一个字节数组
	fos.write("abcde".getBytes());//使用getBytes方法将abcde转为为字节数组
	
	//一次写字节数组的一部分
	fos.write("abcde".getBytes(),0,3);

	//关闭资源
	fos.close();
	}
}

字节流数据的换行

windows \r\n
linux \n
mac \r

fos.write('\n');

数据的追加

带参数true

FileOutputStream fos=new FileOutputStream("aaa.txt",true);

字节流读数据(读文件)fileinputStream

字节流读数据的步骤:
1,创建字节输入对象
2,调用读数据的方法
3,释放资源

一次读取一个字节

public class fileinput {
	public static void main(String[] args) throws Exception {
	//创建对象
	FileInputStream fis=new FileInputStream("a.txt");
	
	//调用读的方法
	int by=fis.read()//返回下一个字节数据
	while(by !=-1){//如果下一个字节没有,就返回-1
		System.out.print((char)by);
		by=fis.read();
	}
	//释放资源
	fis.close();
	}
}

一次读取一个数组

public class fileDome {
	public static void main(String[] args) throws IOException   {
		
	
	FileInputStream fis=new FileInputStream("aaa.txt");
	
	byte[] bys=new byte[1024];
	int len;
	while((len=fis.read(bys)) !=-1){
		System.out.println(new String(bys,0,len));
	}
	fis.close();
	}
}

复制文件

public class fileDome {
	public static void main(String[] args) throws IOException   {
		
	//复制文件
	FileInputStream fis=new FileInputStream("aaa.txt");
	
	FileOutputStream fos=new FileOutputStream("acopy.txt");
	
	byte[] bys=new byte[1024];
	
	int len;
	
	while((len=fis.read(bys)) !=-1){
		fos.write(bys,0,len);
	}
	fis.close();
	fos.close();
	
	}
}

字节缓冲区流

bufferoutputstream 字节缓冲输出流
bufferinputstream 字节缓冲输入流

/*
    BufferedOutputStream用于文件的流式写入,
    其对象创建需要传入一个OutputStream对象,
    OutputStream对象可以提供一个缓冲区(默认大小是8192,即8K),
    OutputStream本身是一个抽象类,
    需要具体的子类来实现,
    如不同的文本文件用FileOutputStream,
    图片用ImageOutputStream,诸如此类...
     */
public class fileDome {
	public static void main(String[] args) throws IOException   {
		
	BufferedOutputStream bos=new BufferedOutputStream(new 			  FileOutputStream("a.txt",true));
		
	bos.write("hello".getBytes());
		
	BufferedInputStream bis=new BufferedInputStream(new FileInputStream("a.txt"));	
	byte[] bys=new byte[1024];
	int len;
	while((len=bis.read(bys)) !=-1){
		System.out.print(new String(bys,0,len));
	}
	bos.close();
	bis.close();	
	}
}

编码与解码

概念
编码:把看得懂的变成看不懂的。
解码:把看不懂的变成看得懂的。

常见的编码表:
1、ASCII : 美国标准信息交换码, 用一个字节的7位表示数据。
2、ISO-8859-1 : 欧洲码表, 用一个字节的8位表示数据, 兼容ASCII。
3、GB2312 : 中文码表的升级版, 融合了更多的中文文字符号, 兼容ASCII。
4、UTF-8 : 是一种可变长度的字符编码, 用1-3个字节表示数据, 又称为万国码, 兼容ASCII用在网页上可以统一页面中的中文简体繁体和其他语言的显示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值