2019.8.7 NIIT第二十二天 /今天才第二十二天,顶住啊/
File类ListFiles
public File[] listFiles() 获取调用方法文件夹下的所有file对象(文件或文件夹)
使用listFiles只想获取目录下后缀名为.txt的文件
- 获取后缀名
- 判断文件名的后缀 my.txt.xlsx 先去定位到最后一个"." int index=filename.lastIndesOf("."); 如果有.截取点后的后缀名 if(index>0){ String s=subString(index+,filename.length()) } .....使用endwith()方法也可以,那你不早说
使用递归实现文件搜索
递归
递归,指在当前方法内调用自己的这种现象
public void method(){
System.out.println(“递归的演示”);
//在当前方法内调用自己
method();
}
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
使用递归求阶乘
public class Testjiecheng {
public int getNJieCheng(int n) {
if(n==1) {
return 1;
}else {
return n*getNJieCheng(n-1);
}
}
}
什么情况使用递归
- 必须有一个终止条件
- 必须要有一个公式或者算法进行推导
人工智能、大数据 神经网络---分层
字节输出流
输出流:
- OutputStream(抽象类)
- FileOutputStream(基本输出流) 构造方法:
- public FileOutputStream(String name):创建输出流操作的目标
- public FileOutputStream(String name,boolean - append):append为true代表每次写入都向文件末尾追加,为false则每次都是覆盖写入 操作方法:
- write(int n):输出一个字节;
- write(byte[] b):输出一个字节数组;
- write(byte[] b, int off , int len):输出字节数组的一部分;
- close(): 释放IO占用的windows底层资源;
字节输入流
输入流:
- InputStream(抽象类):
- FileInputStream(基本输入流) 构造方法:
- public FileInputStream(String name) 操作方法:
- int read():读取一个字节, 返回的是字节内容本身,读取到末尾返回-1
- int read(byte[] b):读取一个字节数组
- close():释放IO占用的系统底层资源
部分读取的时候,读取到部分结束则终止,之后的内容没有读入
文件复制不使用字节数字
一个字节一个字节读取 利用字节流将当前工程下的ASCII码表完整版.doc复制到当前工程下的ASCII码表完整版(副本).doc
public static void main(String[] args) throws IOException {
//利用字节流复制文件D:\eclipseWorkSpace\AdvanceDay09\1.txt
//关联到源文件
FileInputStream fis=new FileInputStream("D:\\eclipseWorkSpace\\AdvanceDay09\\1.txt");
//输出流关联到目标文件
FileOutputStream fos=new FileOutputStream("D:\\eclipseWorkSpace\\AdvanceDay09\\1(副本).txt"); //一个字节一个字节读写操作
int result=-1;
//循环读取数据
while((result=fis.read())!=-1) {
//把读到的数据写入目标文件
fos.write(result);
}
//关闭流,释放资源
fis.close();
//把数据从内存中刷到硬盘
fos.close();
}
使用字节数组复制文件
public static void m2() throws FileNotFoundException, IOException {
FileInputStream fis=new FileInputStream("D:\\eclipseWorkSpace\\AdvanceDay09\\1.txt");
//输出流关联到目标文件
FileOutputStream fos=new FileOutputStream("D:\\eclipseWorkSpace\\AdvanceDay09\\1(副本).txt");
//3、一次读入多个字节
//3.1定义一个字节数组容器来装每次读到的字节
byte[] buffer=new byte[1024*10];
//3.2定义一个数值是返回的字节数
int num=-1;
//3.3循环读取多个字节
while((num=fis.read(buffer))!=-1) {
//3.4把读到的字节暂存在内存
fos.write(buffer, 0, num);
}
//4.关闭流
fis.close();
fos.close();
}
高效流
把数据缓存在内存中,通过flush或者close方法把数据批量发出去
- Java在常规IO流的基础上,提供了更为高效的缓冲流,如下:
- 高效字节缓冲流:BufferedInputStream/BufferedOutputStream
- 高效流使用普通流对象作为构造方法参数。将普通流包装,提供高效的装饰。
- 高效流write写出数据时,写出位置为缓冲区,并非目标资源。需要通过flush刷新方法将缓冲区的内容写出到目标文件中。
- 高效输出流的关闭方法会自动调用flush方法。
在关联文件的时候,就会创建文件
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("");
FileOutputStream fos=new FileOutputStream("");
//创建高效字节输入流
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos,1025*5);
byte[] buffer=new byte[1024*10];
int num=-1;
int total=0;
while((num=bis.read(buffer))!=-1) {
bos.write(buffer,0,num);
total++;
if(total>=1024*5)bos.flush();
}
bis.close();
bos.close();
}