学习java—第二十二天学习笔记

201 阅读3分钟

2019.8.7 NIIT第二十二天 /今天才第二十二天,顶住啊/

File类ListFiles

public File[] listFiles() 获取调用方法文件夹下的所有file对象(文件或文件夹)

使用listFiles只想获取目录下后缀名为.txt的文件

  1. 获取后缀名
  2. 判断文件名的后缀 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);
		}
	}
}

什么情况使用递归

  1. 必须有一个终止条件
  2. 必须要有一个公式或者算法进行推导

人工智能、大数据 神经网络---分层

字节输出流

输出流:

  • 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();
}