1、什么叫io流,io流需要掌握哪些方法
2、十五个常见的流类
3、File类的一些方法
本人学习JavaSe也快有一年了,回顾之前学习IO流的时候,有些地方没搞懂,这段时间在家里回顾复习了一下,写下此篇博客,少年易学老难成,一寸光阴不可轻,这是我的第一篇博客,写的不好的地方,请前辈指正,更详细内容请去哔哩哔哩搜索:北京动力节点,杜聚宾先生讲的JAVASE(老杜有十五年的JAVA开发经验,一流的老程序员了)与大家一起进步,共勉之,多谢。
IO流,就是InputStream和OutputStream单词首字母的缩写,输入和输出的字节流操作,流(水流)数据的流动。
流又可细分为四类
根据种类可分字节流和字符流,根据方法可分输入流和输出流,
看一个流是字节流还是字符流,看它的单词字母结尾就知道是什么了,Stream结尾是字节流,Reader和Writer结尾是字符流。
往内存中去的叫输入流,读取到内存,从内存中出来,往硬盘中去的叫输出流,写入。(以内存作为参照物)。
字节流一次读取八个二进制位,byte,可拷贝视频,音频,图片,文件字节流是万能的...
字符流一次读取一个字符,char ,只能拷贝普通文本文件,word文件都拷贝不了,因为word文件不是普通文件,但是能用记事本打开不乱码的文件都是普通文本文件。
所有流用完之后都要关闭,close()关闭,输出流用完之后要记得调用flush()刷新,把内存中剩余的数据全部输出干净,不刷新可能会丢失数据。(神仙上完wc也是要擦pp的嘛)
流的四大家族首领
InputStream
OutputStream
Reader
Writer
这四个类都是抽象类,不可被实例化。都是顶级的,他们的父类是Object。
常见的十五个流
文件流
操作文件的流
FileInputStream //文件字节输入流
FileOutputStream //文件字节输出流
FileReader //文件字符输入流
FileWriter //文件字符输出流
以下代码是拷贝文件:假设我们要从D盘拷贝文件到E盘,文件并不是唰的一下就过去了,它是要经过内存的,先读取到内存,然后从内存写入到另一个硬盘。应该是一边读一边写,copy完之后,检查一下字节大小,如果是一样的,恭喜你,拷贝成功了
public class Copy{
public static void main(String[] agrs){
FileInputStream fis=null;
FileOutputStream fos=null;
try{
//文件的起点
fis=new FileInputStream("文件的位置");
//文件的终点
fos=new FileOutputStream("另一个位置+拷贝的文件名字");
//我们使用的是字节流,所以定义一个字节数组,一次拷贝一罩文件
byte bytes[]=new byte[1024*1024];
//定义整形变量,返回byte数组读取到的有效字节个数
int readQuantity=0;
//一边读一边写
//获取到的字节数量只要不等于-1就继续循环
while((readQuantity=fis.read(bytes))!=-1){
fos.writer(bytes,0,readQuantity);
}
//刷新一下
fos.flush();
}catch(Exception e){
e.printStackTrace();
}finally{
//分开关闭两个流要分开try,如果一个流影响到另一个流的关闭就不好了
//tip:用ifn可快速生成这个架子(框架)
if(fis!=null){
fis.close();
异常捕捉一下
}
if(fos!=null){
fos.close();
异常捕捉一下
}
}
}
}
缓冲流
自带char或byte数组,有一个readLine()方法,读取一行文本内容,返回一个字符串对象,
没有读取到内容时,返回null
BufferedInputStream //缓冲输入字节流
BufferedOutputStream //缓冲输出字节流
BufferedReader //缓冲输入字符流
BufferedWriter //缓冲输出字符流
对象流
ObjectInputStream //对象输入字节流
ObjectOutputStream //对象输出字节流
数据流
一种加密的流,不是普通文本文件,记事本打开会乱码,输入和输出的顺序要一致,否则读到的数据是错误的,只能用DataInputStream来读取。
DataInputStream //数据输入字节流
DataOutputStream //数据输出字节流
标准流
不需要手动关闭,默认的输出方向是往控制台上打印,可在创建对象时,在构造方法处填写要打印的目标文件的地址,全部打印到目标文件中去。
public class PrintStream{
public static void main(String[]args){
PrintStream ps=new PrintStream(new FileOutputStream("文件的位置.txt"));
ps.println("打印在这里的文字,不会输出到控制台,会输出到 文件的位置.txt文本文件当中");
}
}
PrintStream
转换流
外面的流叫包装流,里面的流叫节点流,关闭流的时候,只需要关闭包装流就可以了,底层源代码在会把节点流的对象付给里面的成员变量in,在调用close方法的时候,只要in不等于空,in也会自动调close方法关闭自己。
InputStreamReader //字节输入流转换成字符输入流
OutputStreamWriter //字节输出流转换成字符输出流
File类
tip:file类不属于四大家族,它是文件和路径的抽象表达形式。用于操作文件和创建目录等...
创建File对象
File f1=new File("文件的路径");
file类常用的方法:
f1.length() //获取文件或目录的字节大小。
f1.mkdir() //创建目录
f1.mkdirs() //创建多重目录,但是构造方法处应该写成这样 new File("D://一层//两层//三层//四层/") ;这只是一个演示的例子。
f1.exists() //判断文件或者目录是否存在。
f1.getAbsolutePath() //获取绝对路径 idea工具的绝对路径就是object工程下的根
f1.lastModified() //获取文件最后一次修改的日期,返回值是一个long类型
public class LastModifiedTest{
public static void main(String[] args){
//创建file对象
File f=new File("D:\这是一个例子");
long lastTime = f.lastModified();
//创建日期对象
Date date=new Date(lastTime);
//格式化日期对象
SimpleDateFormat slf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String time = slf.format(date);
System.out.println("文件最后一次修改的日期是:"+time);
}
}
f1.isFile() //判断文件是否存在
f1.isDrictory() //判断目录是否存在
f1.getParent() //获取上级父目录
f1.createNewFile() //创建一个新的文件
f1.delete() //删除
以上代码都是本人纯手打,有什么错误请指出(我本来是用手机写的,写了我两个小时,一个不小心退出了,打了水漂)这次我是用电脑打的。
歲在辛丑八月十三日秋管著書