疯狂Java学习笔记(019) 输入/输出:IO
变长参数方法:
- 方法定义时,再参数列表中出现的“类名。。。变量名”形式的参数定义,就是变长参数。
- 修饰符 返回值类型 方法名(参数类型...变量名){ }
- 如何传参?
- 实际上传递的就是一个指定类型的数组
- 方法体内就是把若干个参数组织成一个数组!
- 注意:当变长参数和普通参数同时出现时,变长参数一定放到参数列表的最后。
一、输入/输出:
1.IO:File类
- 位于java.io包下,用于表示与平台无关的文件和目录
- File类可以用来操作文件和目录,但是不能用来访问文件的内容,是磁盘上的目录或文件的抽象表示形式,即可用来表示文件,也可以用来表示目录。
2.构造方法
- File(String pathName)通过将给定路径名字符串转换为抽象路径名类创建一个新File实例;
- File(String parent,String child)根据parent路径名字符串和child路径名字符串创建一个新File实例
- File(File parent,String child)根据parent抽象路径名和child路径名字符串创建一个新File实例
- 例如:(右斜杠\\也称反斜杠 ,在路径中“/”等于“\\ ”)
- File f1 = new File("c:/code14")
- File f2 = new File("c:/","code14")
- File f3 = new File(f1,"day10")
3.File类
构造对象时的注意事项:
对象的上层路径如果不存在的化,在创建对象时会报错:
对象要想创建成功,其父File对象(肯定时一个目录)必须存在
- 例子:File f = new File("z:\\a.txt"); //如果z盘不存在的话,在使用f创建文件的时候将报错
- boolean res = f. createNewFile( );
- File f = new File("a.txt");//如果不指定盘符的话,将默认指定项目路径创建
4.File类
创建功能:
- boolean createNewFile( ),创建此抽象路径名指定的文件,返回值是否成功。首先z盘情况,已经有了a.txt。
- boolean mkdir ( ),创建此抽象路径名指定的目录,只创建最后一级目录
- boolean mkdirs( ),创建此抽象路径名指定的目录,包含必须的父File对象若不存在也一并创建
- 注意事项:.txt结尾的不一定是文件,也可能是文件夹,在于是用那个方法创建的。
删除功能:
- boolean delete()删除此抽象路径名表是的文件或目录
- 注意事项:1.java中删除内容不会进入回收站,直接删除
- 2.删除的文件夹中不能包含内容
重命名:
- boolean renameTo(File dest) 重新命名到此抽象路径名表示的文件
- 注意事项:想要改成的目标文件如果不在同一个目录的话,重命名就是剪切功能
判断功能:
- boolean exits( )
- boolean isDirectory( )
- boolean isFile( )
- boolean isHidden( )
- boolean canRead( )
- boolean canWrite( )
获取功能:
- String getAbsolutePath( ) //返回此抽象路径名的绝对路径名字符串
- String getName( ) //返回由此抽象路径名表示的文件或目录的名称
- String getPath( ) //将此抽象路径名转换为一个路径名字符串
- String getParent( ) //返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null;即创建当前File对象时,指定的父路径!
- long length( ) //返回由此抽象路径名表示的文件的长度:字节数
- long lastModified( ) //返回此抽象路径名表示的文件最后一次被修改的时间
高级获取功能:
- String[ ] list( ) // 返回一个字符串数组,这些字符串指定由此抽象路径名表示的目录中的文件和目录名
- File[ ] listFiles( ) //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示
- 第二种方法是File对象,而对象有很多方法可供使用,因此更加灵活
练习:获取某个盘符下的指定类型的文件信息(只看单层目录)
例:获取C盘下的所有jpg图片信息:大小,文件名
思路:1,封装文件对象;2,获得它所有子File对象数组;3,遍历这个数组并判断
补充第二种思路:
在获得数组之前,就进行判断,这样得到的数组就都是满足条件的了,涉及到的接口:FilenameFilter
5.File类
批量更改某个文件夹下的文件名
- 去掉某些标志
- 添加某些标志
思路:
封装目录成File对象
得到此对象下的所有File对象数组
遍历数组,并改名
6.递归,recursive
递归:方法内部调用方法本身的格式
特点:1.要有出口 2.次数不能太多 3.构造方法不能递归
递归解决问题的思想:分解→汇总
样例:
1.递归求5的阶乘
2.不死神兔问题,斐波那契数列
3.递归查找某个目录下所有的txt文件
4.递归删除带内容的文件夹
7.IO(Input Output)流的概念
- Java中将不同设备之间的数据传输抽象为“流”:Stream;
- 设备指的是:磁盘上的文件,网络连接,另一个主机等等。
- 源----------输入流----------Java程序-------输出流-------目标
8.IO流的分类
按流向分:输入流,输出流
1,都是针对内存来说的
2,输入流,只能从其中读取数据
3,输出流,只能把数据放入其中
9.按每次处理的数据单位分:字节流,字符流
字节流:每次处理一个字节
字符流:每次处理一个字符
10.IO流抽象基类
通常流的分类,如果么有特定指出,都是按操作数据单位来说的
字节流:两个方向
- InputStream:
- OutputStream
字符流:两个方向
- Reader: 输入字符流
- Writer:输出字符流
11.IO流分类 图示
12.字节流的继承图
13.字节流
字节输出流抽象基类:OutputStream
字节输出流操作步骤:
-
- 创建输出流对象
- 利用流写出数据
- 关闭资源
14.FileOutputStream实现类
构造方法:
- FileOutputStream(File file):通过一个File对象创建一个文件输出流对象,默认时覆盖模式
- FileOutputStream(String name):通过一个字符串构建一个文件输出流对象
- FileOutputStream(File file,boolean append):通过文件对象创建文件输出流对象,并指定是否追加
- FileOutputStream(String name,boolean append):通过一个字符串构建一个文件输出流对象,并指定是否追加
15.FileOutputStream类的方法
写出数据到流对象:
void write (byte[ ] bytes)一次写一个字节数组的数据
void write(int b) 一次写一个字节
void write(byte[ ] bytes ,int off,int len)一次写一个字节数组的一部分
关闭流对象:
void close( )
关闭此文件输出流并释放与此有关的所有系统资源
关闭流的两个作用:
1.让流不能再继续使用 2.释放和此流相关的系统资源
FileOutputStream练习
1.如何实现写出数据的换行
2.如何实现写出数据的追加
16.InputStream的实现子类
常用实现子类:
FileInputStream
构造方法:
FileInputStream(File file) 通过File对象创建一个文件输入流对象
FileInputStream(String name) 通过一个字符串创建一个文件输入流对象
方法:
一次读一个字节
int read( ):返回值就是本次读到的字节值!
一次读一个字节数组
int read(byte[ ] buf ):返回值表示本次读取到的有效字节数!!
一旦读到文件末尾,返回值是-1
关闭:
void close
17.字节输入流操作步骤:
- 创建输入流对象
- 利用流读入数据
- 关闭资源