异常
定义:就是程序出现不正常的情况。
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用在网页上可以统一页面中的中文简体繁体和其他语言的显示。